Running remote Powershell scripts for SharePoint

I’ve been playing around with Powershell the last week and thought I’d post some of my trickier findings:

Remoting with powershell

With remoting you can script installations or configurations that should be done on multiple farms/servers without having to login to each farm and run the script with it’s variables. Now you can just build 1 big script with variables and run each part of the script with a remote powershell session opened with the correct credentials.

The code below calls some functions to start a new remote session with fixed name, load variable / functions file into the session to be used later, run your code using the variables and functions, end session.

StartRemoting $AUTH_Servername $AUTH_ServerUser $AUTH_ServerUserPassword

            $s = Get-PSSession -Name "RemoteSP2010Script"

            Invoke-Command -Session $s -ScriptBlock {

            LoadSharePointCmdlets

                                                #YOUR CODE

            }

            StopRemoting $AUTH_Servername

\n

\n

function LoadSharePointCmdlets()

{

 

Write-Host "- Loading SharePoint cmdlets" -foregroundcolor "Green"

Add-PsSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

}

 

function StartRemoting($Server, $Username, $Password)

{

    #Build credentials from variables

    if($Username -eq $NULL)

    {

        $Credentials = $NULL

    }

    else

    {

        $Credentials = New-Object -TypeName System.Management.Automation.PSCredential 

                                                        -argumentlist $Username , $Password 

    }

 

    #enable remoting

    enable-PSRemoting -confirm:$false

    

    #increase memory limit for remote shell

    Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 1000 

 

    #Disconnects the client remote desktop

    #Enable-WSManCredSSP -Role client -DelegateComputer $Server -Force

    

    Write-Host "Starting new remote session to" $Server -foregroundcolor "Green"

       if ($Credentials -eq $NULL)  

      {  

            $s = new-psSession -ComputerName $Server -Name "RemoteSP2010Script"

      } 

      else

      {

           $s = new-psSession -ComputerName $Server -Authentication CredSSP

                                       –Credential $Credentials -Name "RemoteSP2010Script"

      }

    

    #Load Variables & functions into remote session

    Write-Host "Loading variables and functions into remote session"  -foregroundcolor "Green"

    

    Invoke-Command -Session $s -FilePath $VariableFileLocation -ErrorAction SilentlyContinue

    Invoke-Command -Session $s -FilePath $FunctionsFileLocation -ErrorAction SilentlyContinue

}

 

function StopRemoting($Server)

{

    Write-Host "Closing remote session to" $Server -foregroundcolor "Green"

    Remove-PSSession -ComputerName $Server

}

leave your comment