Forum Discussion

Joseph Ackerman's avatar
Joseph Ackerman
Iron Contributor
Mar 17, 2017

Using PnP PowerShell On Premises and Online

I have a hybrid environment with a publishing site on premises and collaboration sites in SharePoint Online.  I have some scripts that need to run against both environments (independently, not simultaneously -- there will be one run of the script for each environment).

 

I found Erwin's article about setting up my PnP-based scripts so that they can work with either environment here:

 

https://rencore.com/blog/using-the-officedev-pnp-powershell-cmdlets-for-both-on-prem-and-in-the-cloud/ 

 

but it seems to be a bit out of date.  I have followed the directions about the environment variables and tried to compensate for the changes to the pathing/naming of libraries on my own, but even so I am getting errors that are keeping my scripts from running.  The first is a Warning about "unapproved verbs", and the second is that "some required components are missing" even though I just downloaded and installed both the 2016 and Online releases for March 2017. I am trying to import the pnp commands at the top of my script with this:

 

Import-Module $pnpmodulepath -Force

 

where $pnpmodulepath is a string passed in as a parameter. I am currently passing in this string:

"C:\Users\[myusername]\AppData\Local\Apps\SharePointPnPPowerShellOnline\Modules\SharePointPnPPowerShellOnline\SharePointPnP.PowerShell.Online.Commands.dll"

 

Is there any updated guidance available for writing scripts that will run on multiple environments from the same machine?

 

Thanks in advance.

  • Okay, I figured out that I need to target the SharePointPnPPowerShell[2013|2016|Online].psd1 file and not the .DLL.  That solves the main issue above.  I also found the -DisableNameChecking parameter which got rid of the "verb" warning.

     

    HOWEVER...

     

    When I try running agaist 2016 on premises, Connect-PnPOnline complains:

     

    Connect-PnPOnline : Method not found: 'Void Microsoft.SharePoint.Client.ClientContextExtensions.ExecuteQueryRetry(Microsoft.SharePoint.Client.ClientRuntimeContext, Int32, Int32)'.

     

    Is there some issue with ExecuteQueryRetry in the 2016 version of the library?  I have the exact same script running against my SP Online site and it works perfectly.

     

    I have triple checked that the correct 2016 module is the only one loaded.  I really need to be able to use this against an On Prem installation, so any insight will be welcome.

     

    Thanks in advance.

     

Resources