Centrum skryptów - Systemy operacyjne

Ciekawią mnie usługi zdalne serwera SharePoint i ich obsługa przy użyciu programu Windows PowerShell 2.0 i usługi WinRM

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Ciekawią mnie usługi zdalne serwera SharePoint i ich obsługa przy użyciu programu Windows PowerShell 2.0 i usługi WinRM.

(Uwaga: dzisiejszy artykuł z serii „Cześć, Skrypciarze” został napisany przez skrypciarza-gościa — Tome'a Tanasovskiego. Tome jest kierownikiem zespołu inżynierów serwerowych w Nowym Jorku. Jest certyfikowanym trenerem firmy Microsoft, specjalizującym się w technologiach SQL Server, SharePoint i VMWare. Publikuje na forum Windows PowerShell oraz na forum skrypciarzy. Tome prowadzi też blog i jest organizatorem inauguracyjnego spotkania grupy użytkowników programu Windows PowerShell z Nowego Jorku. Dzięki, Tome!)
----------

Frustracja. Według słownika frustracja to „stan przykrego napięcia emocjonalnego wywołany niemożnością zaspokojenia jakiejś potrzeby lub osiągnięcia jakiegoś celu”.

Myślę, że to dobry opis moich początkowych doświadczeń w pracy z interfejsami modelu obiektów Microsoft Office SharePoint. Kiedy ukazał się program Microsoft Office SharePoint Server (MOSS) 2007, chciałem go szybko wypróbować. Nowy aparat przepływu pracy, sprawniejsze wyszukiwanie i bardziej elastyczna struktura — zapowiadało się znakomicie. Skoczyłem na głęboką wodę, zaczynając od list i automatyzacji, ale koniec końców postanowiłem zająć się czymś bardzo prostym, jak np. obróbką danych z mojego komputera przy użyciu mojego własnego kodu. Szybko dowiedziałem się czegoś, czego dowiaduje się każdy, kto tego spróbuje: nie jest to takie proste.

Aby korzystać z modelu obiektów SharePoint, należy uruchomić kod w interfejsie internetowym SharePoint Web będącym hostem witryny, do której chce się uzyskać dostęp. Uznałem, że to mi się na nic nie przyda, i zacząłem poszukiwania sposobu uzyskania dostępu do danych przy użyciu usług sieci Web. Wykonanie tego przy użyciu programu Windows PowerShell okazało się nie tylko trudne, ale i czasochłonne oraz mało wydajne. Frustracja — przykre napięcie emocjonalne wywołane niemożnością zaspokojenia potrzeby lub osiągnięcia celu.

I wtedy zjawił się program Windows PowerShell 2.0 i usługa WinRM.

Zachwyt. Definicja w słowniku: „uczucie uznania dla kogoś lub czegoś”.

Zachwyt nie był niestety natychmiastowy, ale wiedziałem od razu, że jest w moim zasięgu. Koncepcja jest prosta: Funkcjonalność zdalna programu Windows PowerShell powinna umożliwić mi korzystanie z interfejsów modelu obiektów Office SharePoint z dowolnego komputera. Po zainstalowaniu programu Windows PowerShell 2.0 z usługą WinRM na serwerze SharePoint i nawiązaniu sesji zdalnej, zauważyłem, że mogę wczytać obszar nazw Microsoft.SharePoint. Niestety wkrótce okazało się, że próba zdalnego użycia klasy powoduje taki sam problem.

Końcowym wynikiem mojej dłubaniny było odkrycie, że aby to działało, mogę użyć uwierzytelniania CredSSP. Niestety wadą takiego rozwiązania jest to, że CredSSP nie działa w systemie Windows Server 2003. Oto kroki, które muszę wykonać, aby usługi zdalne programu Windows PowerShell działały na moim komputerze z systemem Windows 7 oraz na komputerze z systemem Windows Server 2008 i usługami Microsoft Office SharePoint Services 2007.

  • Instalacja programu Windows PowerShell 2.0 z usługą WinRM na serwerze SharePoint.

  • Włączenie usług zdalnych na serwerze SharePoint:

Enable-PSRemoting
  • Włączenie uwierzytelniania CredSSP na serwerze:
Enable-WSManCredSSP -Role server
  • Włączenie uwierzytelniania CredSSP na komputerze klienckim:
Enable-WSManCredSSP -Role client -DelegateComputer server1
  • Na komputerze klienckim należy także skonfigurować zasady, uruchamiając program gpedit.msc i włączając zasadę „Zezwalaj na delegowanie świeżych poświadczeń”, znajdującą się w folderze Delegowanie poświadczeń:

  • Należy dodać do listy pozycję WSMAN/server.fqdn lub użyć symbolu wieloznacznego:

Po wykonaniu powyższych kroków można rozpocząć eksplorację modelu obiektów SharePoint z lokalnego komputera, używając parametru -Authentication CredSSP w poleceniu Invoke-Command. Zobaczmy, jak łatwo uzyskać dostęp do danych z kalendarza i wyeksportować je do pliku CSV w udziale sieciowym:

$script = {

    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Sharepoint")

    $site = New-Object Microsoft.SharePoint.SPSite("http://server1")

    $web = $site.OpenWeb("")

    $list = $web.Lists["Calendar"]

 

    $exportlist = @()

    $list.Items |foreach {

        $obj = New-Object PSObject -Property @{

            Title = $_["Title"]

            StartTime = $_["Start Time"]

            Location = $_["Location"]

        }

        $exportlist += $obj    

    }

    $exportlist |Export-Csv -path '\\tome-pc\share$\Calendar.csv'

}

Invoke-Command -ComputerName server1 -scriptblock $script -Authentication Credssp

Utwórzmy nową witrynę internetową:

$script = {

    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

    $site = New-Object Microsoft.SharePoint.SPSite("http://server1")

    $web = $site.OpenWeb("")

    $web.Webs.Add("NewSite", "NewSite", "NewSite Desc",[Convert]::ToUInt32(1033), $web.WebTemplate, $false, $false)

}

Invoke-Command -ComputerName server1 -scriptblock $script -Authentication Credssp

A teraz wykonajmy pewne manipulacje na folderach i plikach. W tym skrypcie nawigujemy do folderu Dokumenty udostępnione, tworzymy folder archiwum, a następnie kopiujemy do niego całą zawartość:

$script = {

    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

    $site = New-Object Microsoft.SharePoint.SPSite("http://server1")

    $web = $site.OpenWeb("")

    $folder = $web.GetFolder("Shared Documents")

    $folder.SubFolders.Add("Archive")

    $folder.Files|foreach {

        $_.CopyTo(("Shared Documents/Archive/" + $_.Name))

    }

}

Invoke-Command -ComputerName server1 -scriptblock $script -Authentication CredSSP

Rzecz jasna nie ma potrzeby ograniczania się do używania bloków skryptu. Dostępne są wszystkie metody korzystania z usług zdalnych. Można utworzyć skrypt lokalnie i użyć parametru -FilePath polecenia Invoke-Command, aby go uruchomić:

Invoke-Command -ComputerName -FilePath .\script.ps1 -Authentication CredSSP

Można też otworzyć sesję i nawiązać bezpośrednią interakcję z obiektami, używając polecenia Enter-PSSession i parametru -Authentication CredSSP:

Enter-PSSession server1 -Authentication CredSSP

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

$site = New-Object Microsoft.SharePoint.SPSite("http://server1")

$site|Get-Member

Mając model obiektów SharePoint w zasięgu, wreszcie można w elastyczny sposób pracować zdalnie — bez frustracji. Miłej pracy!

 Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne