Centrum skryptów - Systemy operacyjne

Ciekawią mnie usługi zdalne w programie Windows PowerShell 2.0

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

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 w programie Windows PowerShell 2.0

(Od redakcji: fragmenty dzisiejszego artykułu pochodzą z wydanej przez Microsoft Press książki autorstwa Eda Wilsona Windows PowerShell 2.0 Best Practices. Zachęcamy do zamówienia książki).

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Słyszałam, że usługi zdalne to jedna z najlepszych funkcji programu Windows PowerShell 2.0. Co dają usługi zdalne programu Windows PowerShell 2.0 i jak ich używać?
-FL

Cześć Skrypciarze! Pytanie

Cześć, FL! Czołem, tutaj skrypciarz Ed Wilson. Cały wczorajszy dzień spędziłem, łażąc na czworakach na strychu i poprawiając kable telefoniczne. Chciałem przenieść ruter ADSL na drugą stronę biura, ale tam nie było linii telefonicznej. Chciałem też podłączyć kilka nowych portów Ethernet, ponieważ wkrótce będę instalować nowy komputer. Przypomniało mi to dawne czasy, kiedy dopiero zaczynałem pracę z komputerami, a język VBScript nie został jeszcze opracowany. Całkiem fajnie było wyciągnąć stare narzędzia i zanurzyć się w kurzu i resztkach izolacji. Coś bardzo nostalgicznego. Wadą prowadzenia tego rodzaju prac instalacyjnych w domu jest to, że trzeba po sobie posprzątać zdecydowanie dokładniej niż w biurze, szczególnie że Skrypciarska Żona jest bardzo pod tym względem wymagająca.

Skoro mowa o nostalgii — pamiętam, że w dawnych czasach uruchomienie polecenia na komputerze zdalnym wymagało ruszenia się z fotela i podejścia do takiego komputera lub zastosowania prymitywnej wersji interfejsu telefonicznego — czyli poinstruowania kogoś przez telefon, jak wpisać odpowiednie polecenie. Nie istniało scentralizowane zarządzenie, a dostęp zdalny był bardzo ograniczony. Stare, dobre czasy! Trzystubodowe modemy, które przez cały dzień pobierały jeden plik! Dobrze, że to już przeszłość. Wolę teraźniejszość lub — jeszcze lepiej — nieodległą przyszłość. Wydanie systemu Windows 7 i programu Windows PowerShell 2.0 to właśnie ta przyszłość, na którą czekałem!

Zdalna sesja programu PowerShell

Jeśli chcemy wprowadzić serię poleceń lub wykonać jakąś pracę na zdalnym serwerze albo komputerze klienckim, najlepiej użyć zdalnej sesji interaktywnej. Zdalna sesja interaktywna przekształca sesję programu Windows PowerShell na komputerze lokalnym w sesję programu Windows PowerShell na komputerze zdalnym. Wszelkie wpisywane polecenia są wykonywane tak, jakby zostały wpisane w konsoli zdalnego komputera.

Uwaga:

Należy zachować uwagę podczas wpisywania ścieżek — są one rozpoznawane na komputerze zdalnym.Z początku może to być bardzo mylące.

W konsoli programu Windows PowerShell można mieć uruchomioną tylko jedną zdalną sesję interaktywną. Dopuszczalne jest jednak uruchomienie kilku konsol programu Windows PowerShell, a każdej z nich zdalnej sesji interaktywnej. Aby rozpocząć interaktywną sesję programu Windows PowerShell, należy użyć apletu polecenia Enter-PSSession. Nie ma potrzeby korzystania z uwierzytelniania przekazywanego, ponieważ aplet polecenia obsługuje odpowiedni parametr. Składnię tę widać poniżej:

Enter-PSSession -ComputerName Berlin -Credential nwtraders/administrator

Aby utworzyć zdalną sesję programu Windows PowerShell, należy użyć apletu polecenia New-PsSession. Zastosowanie apletów poleceń New-PsSession i Enter-PsSession ukazano poniżej.

 

PS C:\> New-PSSession -Name server1Test -ComputerName server1



 Id Name            ComputerName    State    ConfigurationName     Availability

 -- ----            ------------    -----    -----------------     ------------

  4 server1Test     server1         Opened   Microsoft.PowerShell     Available





PS C:\> Enter-PSSession -Name server1Test

[server1]: PS C:\Users\administrator.NWTRADERS\Documents> hostname

Server1

[server1]: PS C:\Users\administrator.NWTRADERS\Documents> gwmi win32_operatingsystem





SystemDirectory : C:\Windows\system32

Organization    :

BuildNumber     : 7600

RegisteredUser  : Windows User

SerialNumber    : 00486-001-0001076-84399

Version         : 6.1.7600







[server1]: PS C:\Users\administrator.NWTRADERS\Documents> exit

PS C:\> gwmi win32_operatingsystem





SystemDirectory : C:\Windows\system32

Organization    :

BuildNumber     : 7600

RegisteredUser  : win7

SerialNumber    : 00392-918-5000002-85015

Version         : 6.1.7600



PS C:\>

Zdalne wykonywanie poleceń

Jeśli na komputerze zdalnym chcemy uruchomić tylko kilka poleceń, możemy użyć apletu polecenia Invoke-Command. Użycie apletu polecenia Invoke-Command powoduje nawiązanie połączenia zdalnego na komputerze zdalnym, wykonanie polecenia, zwrócenie danych na komputer źródłowy i przerwanie połączenia. Wysłanie kolejnego polecenia na komputer zdany spowodowałoby nawiązanie nowego tymczasowego połączenia w taki sam sposób, jak przed chwilą. Nie ma stałego połączenia, a żadne dane nie są współużytkowane przez poszczególne połączenia. W poniższym kodzie uruchamiamy aplet polecenia Get-Host na serwerze zdalnym o nazwie berlin. Jak zobaczymy, wyniki z serwera berlin są zwracane na komputer-host:

 

PS C:\> Invoke-Command -ComputerName berlin -ScriptBlock { get-host }





Name             : ServerRemoteHost

Version          : 1.0.0.0

InstanceId       : 4bef95fc-7ee4-4be6-93b8-be7ea9ed3757

UI               : System.Management.Automation.Internal.Host.InternalHostUserInterf

                   ace

CurrentCulture   : en-US

CurrentUICulture : en-US

PrivateData      :

PSComputerName   : berlin

Połączenie stałe

Jeśli chcemy uruchomić serię poleceń na komputerze zdalnym, zachowując możliwość wymiany danych pomiędzy poleceniami, musimy przed użyciem apletu polecenia Invoke-Command nawiązać połączenie stałe. Utworzenie stałej sesji wymaga użycia apletu polecenia New-PsSession i określenia nazwy komputera. Należy zapisać zwrócony obiekt połączenia w zmiennej. Następnie użyjemy tego połączenia podczas uruchamiania polecenia zdalnego. W naszym przykładzie rozpoczynamy najpierw stałą sesję z komputerem o nazwie berlin. Przechowujemy zwrócony obiekt sesji w zmiennej o nazwie $session. Następnie używamy parametru session wraz z apletem polecenia Invoke-Command, uruchamiając dwa polecenia. Pierwsze polecenie wykorzystuje aplet polecenia Get-Command do uzyskania kolekcji poleceń z komputera zdalnego. Obiekty poleceń są przechowywane w zmiennej o nazwie $a. W kolejnym poleceniu nadal korzystamy z połączenia stałego, tym razem udostępniając zmienną $a do współużytkowania przy uruchamianiu obu poleceń. Przekazujemy obiekty znajdujące się w zmiennej $a do apletu polecenia Get-Help. Kod ten widać poniżej:

$session = New-PSSession -ComputerName berlin

Invoke-Command -Session $session -ScriptBlock { $a = Get-Command }

Invoke-Command -Session $session -ScriptBlock { $a | get-help }

Jak widać poniżej, nie można użyć nazwy sesji utworzonej wcześniej w naszym przykładzie. Jest to spowodowane tym, że nazwa sesji to ciąg znaków, a parametr –session potrzebuje obiektu sesji. Próba użycia nazwy sesji z wcześniejszego polecenia spowoduje błąd, ponieważ program Windows PowerShell nie może powiązać parametru –session z ciągiem znaków. Po utworzeniu nowej sesji można użyć apletu polecenia Invoke-Command do uruchomienia polecenia na zdalnym komputerze. Widać to poniżej:

Zdalne wykonywanie skryptu

Załóżmy, że mamy skrypt, który chcemy uruchomić na komputerze zdalnym, ale skrypt ten jest przechowywany lokalnie na komputerze-hoście. Dotychczas w takiej sytuacji musielibyśmy fizycznie skopiować skrypt na komputer zdalny, a potem użyć czegoś w rodzaju metody create klasy Win32_Process. W programie Windows PowerShell 2.0 możemy użyć apletu polecenia Invoke-Command do uruchomienia na komputerze zdalnym skryptu przechowywanego lokalnie. Po uruchomieniu skryptu wyniki jego działania są zwracane na komputer lokalny. W naszym przykładzie używamy apletu polecenia Invoke-Command do uruchomienia skryptu o nazwie getBios.ps1 na komputerze zdalnym o nazwie berlin. Parametr filepath określa, gdzie aplet polecenia Invoke-Command będzie szukać skryptu. Musi to być ścieżka rozpoznawana lokalnie.

PS C:\> Invoke-Command -ComputerName berlin -FilePath C:\fso\getBios.ps1

SMBIOSBIOSVersion : 080002

Manufacturer      : American Megatrends Inc.

Name              : BIOS Date: 02/22/06 20:54:49  Ver: 08.00.02

SerialNumber      : 2096-1160-0447-0846-3027-2471-99

Version           : A M I  - 2000622

PSComputerName    : berlin

Uwaga:

Zalecamy używanie sesji interaktywnej do uruchamiania wielu poleceń na jednym komputerze zdalnym. Jeśli mamy jedno lub dwa polecenia, które chcemy uruchomić na wielu komputerach zdalnych, lepiej użyć zdalnego wykonywania poleceń. Chcą uruchomić wiele poleceń na wielu komputerach, najlepiej zastosować stałe połączenie. I wreszcie, jeśli chcemy uruchomić skrypt, którego nie ma na komputerze zdalnym, warto użyć zdalnego wykonywania skryptu.

Cóż, FL, to już koniec podstawowego omówienia usług zdalnych w programie Windows PowerShell.

Skrypciarze Ed Wilson i Craig Liebendorfer

 Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne