Remote SharePoint Management Shell

W przypadku systemu Microsoft Exchange 2013 zdalna administracja z poziomu konsoli Windows PowerShell nie jest żadnym problemem. Wystarczy podpiąć się zdalną sesją do dedykowanej usługi systemu pocztowego i już można korzystać z pełni dobrodziejstw konsoli Exchange Management Shell.
Niestety w przypadku rozwiązania SharePoint 2013, nie ma tak łatwo. Wspomniany system nie udostępnia tak elastycznego mechanizmu, jak wcześniej wymieniony Exchange 2013. Niemniej jednak, zdalne podłączenie się do konsoli SharePoint Management Shell nie jest niemożliwe.

Aby móc zdalnie administrować systemem SharePoint 2013 z poziomu konsoli Windows PowerShell, konieczne jest odpowiednie skonfigurowanie zarówno serwera, jak i stacji klienckiej z której będzie następowało połączenie. Niemniej jednak, cała konfiguracja dotyczy tylko i wyłącznie odpowiedniej konfiguracji usługi zdalnej administracji.

W pierwszej kolejności należy włączyć i skonfigurować usługę Windows Remote Management. Najprościej tego dokonać dedykowanym cmdletem:

Enable-PSRemoting -Force

Dodatkowo, ważne aby skonfigurować mechanizm uwierzytelniania CredSSP (Credential Security Support Provider). Dzięki wspomnianemu dostawcy obsługi zabezpieczeń możliwe jest delegowanie poświadczeń użytkownika z komputera klienckiego, z którego jest nawiązywane połączenie, na docelowy serwer. Można tego dokonać następującym poleceniem:

Enable-WSManCredSSP -Role Server -Force

Drugim etapem jest konfiguracja klienta. Mianowicie, dla stacji klienckiej również konieczna jest odpowiednia modyfikacja ustawień mechanizmu CredSSP. Niemniej jednak, jak można się domyślić musi ona pełnić rolę klienta, w przeciwieństwie do ustawień wcześniej prezentowanych.

Enable-WSManCredSSP -Role Client -DelegateComputer * -Force

Pomiędzy tak skonfigurowanymi maszynami, możliwe jest nawiązywanie bezpiecznego połączenia zdalnego. Sposobów na zdalną administrację systemem SharePoint 2013 z konsoli Windows PowerShell jest wiele. Najprostszym z nich, jest przejście do zdalnej sesji w ramach serwera SharePoint 2013. Można tego dokonać w następujący sposób:

$Credential = Get-Credential "Contoso\Administrator"
Enter-PSSession sp.contoso.com -Authentication CredSSP -Credential $Credential
Add-PSSnapIn Microsoft.SharePoint.PowerShell

…gdzie ostatecznie będą dostępne wszystkie cmdlety przystawki SharePoint Management Shell. Na przykład:

Get-SPFarm

Niemniej jednak, co w przypadku gdy chcemy zastosować konkretne operacji nie tylko podczas bieżącej sesji lecz również wewnątrz gotowych skryptów? Mianowicie, sprawa jest prosta. Wystarczy zaimportować wcześniej utworzoną zdalną sesje do bieżącej konsoli, czyli rozwiązanie zbliżone do mechanizmu zdalnej pracy z konsolą Exchange Management Shell. Jedyną zasadniczą różnicą jest konieczność wcześniejszego załadowania przystawki SharePoint Management Shell w ramach nowo utworzonej sesji.

$Password = ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential ("Contoso\Administrator", $Password)
$Session = New-PSSession sp.contoso.com -Authentication CredSSP -Credential $Credential

Invoke-command $session {Add-PSSnapin Microsoft.SharePoint.Powershell}
Import-PSSession $Session -ErrorAction SilentlyContinue

Oczywiście możliwe jest usprawnienie powyższego mechanizmu. Niemniej jednak w pierwszej kolejności wymagane jest zarejestrowanie konfiguracji dla zdalnych sesji w ramach serwera ShrePoint 2013. Aby tego dokonać tworzymy plik skryptu, który będzie ładował konsolę SharePoint Management Shell, a następnie na jego bazie rejestrujemy profil konfiguracji:

"Add-PSSnapIn Microsoft.SharePoint.PowerShell" | Out-File C:\SPShell.ps1
Register-PSSessionConfiguration -name SharePointManagementShell -StartupScript C:\SPShell.ps1 -Force

Następnie, w ramach stacji klienckiej nawiązujemy połączenie zdalnej sesji z wykorzystaniem wcześniej zarejestrowanej konfiguracji:

$Session = New-PSSession sp.contoso.com -Authentication CredSSP -Credential $Credential –ConfigurationName SharePointManagementShell

Teraz możemy po prostu zaimportować gotową sesję zdalną, w celu rozpoczęcia pracy:

Import-PSSession $Session -ErrorAction SilentlyContinue

W zasadzie to była by najdogodniejsza forma, ale rozwiązanie możemy udziwniać bardziej. Mianowicie, inną alternatywą jest wyeksportowanie sesji do lokalnego modułu dostępnego w ramach danej maszyny:

Export-PSSession -Session $session -OutputModule "SP2013" -CommandName *-SP* -Force –AllowClobber

Powyższa operacja doprowadzi do wygenerowania modułu Windows PowerShell, w ramach lokalizacji %userprofile%\Documents\WindowsPowerShell\Modules\. Wykorzystując wspomniany moduł możliwe z możliwe jest szybsze nawiązanie połączenia ze zdalnym serwerem oraz automatyczne załadowanie wymaganej przystawki SharePoint Management Shell.

Niestety ów rozwiązanie ma pewien mankament, podczas nawiązywania połączenia wymagane jest ręczne wprowadzenie wymaganych poświadczeń. Aby obejść ten problem należy ręcznie zmodyfikować plik .psm1 wyeksportowanego modułu. W ramach niego wystarczy zmodyfikować następujący blok kodu:

Set-PSImplicitRemotingSession `
-CreatedByModule $true `
-PSSession (
$(
& $script:NewPSSession `
-ComputerName 'sp.contoso.com' `
-ApplicationName 'wsman'    -ConfigurationName 'SharePointManagementShell' `
-SessionOption (Get-PSImplicitRemotingSessionOption) `
-Credential ( $host.UI.PromptForCredential( 'Windows PowerShell Credential Request', 'Enter your credentials for http://sp.contoso.com/wsman.', 'Contoso\Administrator', 'sp.contoso.com' ) ) `
-Authentication Credssp `
)
)

… na:

$Password = ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential ("Contoso\Administrator", $Password)

Set-PSImplicitRemotingSession `
-CreatedByModule $true `
-PSSession (
$(
& $script:NewPSSession `
-ComputerName 'sp.contoso.com' `
-ApplicationName 'wsman'    -ConfigurationName 'SharePointManagementShell' `
-SessionOption (Get-PSImplicitRemotingSessionOption) `
-Credential ( $Credential ) `
-Authentication Credssp `
)
)

Dzięki temu zabiegowi możliwe jest pełne zautomatyzowanie procesu zdalnego wykorzystywania przystawki SharePoint Management Shell:

Import-Module SP2013
Get-PSFarm

Niestety należy pamiętać, iż zaprezentowane rozwiązanie wymaga zapisania poświadczeń w skrypcie, które nie jest zbyt bezpiecznym rozwiązaniem. Dlatego najważniejsze by stosować je z głową…

Źródła:
https://technet.microsoft.com/en-us/library/hh849872.aspx
https://technet.microsoft.com/en-us/library/hh849741.aspx
https://technet.microsoft.com/en-us/library/ff678226.aspx

Advertisements

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s