Artykuły

A A A
Drukuj Ekportuj do PDF
Opublikowane: 2011.05.17 7:00 | Marek Krupa | Aktualizacja: 2011.10.02 1:36

Zdalne zarządzanie za pomocą PowerShella

tagi: PowerShell
W artykule tym dowiesz się, w jaki sposób nawiązać sesję ze zdalnym komputerem oraz w jaki sposób wykonać jakieś polecenia na zdalnych maszynach.

PowerShell jest narzędziem bardzo zaawansowanym. Zakres w jakim może być wykorzystywany jest bardzo szeroki. Na początku było zarządzanie samym systemem operacyjnym, a dzisiaj w obszarach jego „zainteresowania" jest Active Directory, Internet Information Services, SharePoint 2010, Exchange itd. Wymieniać można by jeszcze dalej.

Wprowadzenie

PowerShell jest narzędziem bardzo zaawansowanym. Jego obszar działania jest bardzo duży. Na początku było zarządzanie samym systemem operacyjnym a dzisiaj w obszarach jego „zainteresowania" jest Active Directory, Internet Information Services, SharePoint 2010, Exchange itd. Wymieniać można by jeszcze dalej.

Najczęściej PowerShell jest uruchamiany lokalnie i wszystkie zadania wykonujemy na lokalnym systemie. Nic nie stoi jednak na przeszkodzenie aby pracę sobie ułatwić jeszcze bardziej i używać PowerShella do wykonywania zadań na zdalnych komputerach. Np. gdy mamy potrzebę zrestartowania jakiejś usługi na 20 serwerach albo musimy szybko utworzyć 10 witryn sharepointowych dla kilku różnych adresów. Część ze zdalnych zdań mogła być wykonywana zdalnie już w PowerShell 1.0 - dzięki wykorzystaniu np. WMI. Ale w wersji 2.0 zniknęły ograniczenia typowe dla tego rozwiązania i możliwe stało się pełne zdalne zarządzanie.

Wymagania wstępne

Aby PowerShell potrafił się zdalnie komunikować z komputerami muszą one spełniać pewne wstępne warunki. Na zdalnych komputerach musi być zainstalowane następujące oprogramowanie:

  • Windows PowerShell w wersji 2.0
  • .NET Framework 2.0 SP1 lub nowszy
  • Windows Remote Management (WinRM) w wersji 2.0.

Wszystkie wymagania programowe spełniają z pudełka systemy Windows 7 i Windows Server 2008 R2. Jedyną rzeczą, którą być może trzeba będzie zrobić to włączyć odpowiednie funkcje w tych systemach.

Zarządzać również możemy zdalnie systemami starszymi, na dzień dzisiejszy za najstarszy wspierany system można uznać Windows XP z SP3  oraz Windows Server 2003. W wypadku tych systemów należy zainstalować PowerShell 2.0 oraz WinRM w wersji 2.0. Oba komponenty wchodzą w skład Windows Management Framework, który można pobrać ze stron pomocy technicznej firmy Microsoft.

W przypadku systemów wspierających lokalizację sieciowe, takie jak Windows Vista czy Windows 7, należy pamiętać aby lokalizacja sieciowa ustawiona była na prywatną lub firmową. W przypadku ustawienia lokalizacji na publiczną Windows Management  nie będzie działał prawidłowo.

Konfigurowanie zdalnego zarządzania

W systemach Windows domyślnie usługa zdalnego zarządzania (WinRM) jest wyłączona. Jest to działanie w myśl zasady: jeżeli chcesz czegoś używać musisz to włączyć. Aby nawiązać zdalną sesję z jakimś komputerem, należy w pierwszej kolejności skonfigurować usługę WinRM. Można to zrobić na kilka sposobów:

  • Za pomocą funkcji PowerShella Enable-PSRemoting, program interaktywnie poprosi o potwierdzenie włączenia i skonfigurowania usługi WinRM (rys. 1).
  • Za pomocą funkcji PowerShella Set-WSManQuickConfig, podobnie jak w przypadku wcześniejszej funcji program interaktywnie poprosi o potwierdzenie włączenia i skonfigurowania usługi WinRM.
  • winrm quickconfig.
  • Jeżeli używamy Windows Server 2008 R2 w wersji core to odpowiedniej konfiguracji możemy dokonać za pomocą polecenia sconfig.

Usługę WinRM może skonfigurować tylko użytkownik z uprawnieniami administratora co oznacza, że w systemach Windows Vista i nowszych, na których włączona jest Kontrola Konta Użytkownika należy uruchomić konsolę PowerShella z podniesionymi uprawnieniami.

Usługę WinRM wystarczy skonfigurować tylko na zdalnym komputerze, czyli na tym, z którym będziemy nawiązywać zdalną sesję. Nie trzeba jej konfigurować na komputerze lokalnym.

Konfigurowanie usługi WinRM za pomocą polecenia Enable-PSRemoting

Rys. 1. Konfigurowanie usługi WinRM za pomocą polecenia Enable-PSRemoting.

Do sprawdzenia czy usługa WinRM jest skonfigurowana na komputerze możemy użyć polecenia Test-WSMan. Składnia tego polecenia wygląda następująco:

Test-WSMan -ComputerName NazwaKomputera -Authentication MechanizmUwierzytelnienia -Credential Poswiadczenia

Gdzie:

  • NazwaKomputera - nazwa zdalnego komputera, na którym chcemy przetestować konfigurację usługi,
  • MechanizmUwierzytelnienia - mechanizm Uwierzytelnienia, który zostanie wykorzystany podczas próby podłączania do zdlanego komputera. Do wyboru mamy opcje: basic, digest, kerberos, negotiate, credSSP oraz default. Wskazanie wartości default spowoduje, że wybranie zostanie metoda zaimplementowana przez protokół WS-Management.

Przykład wykorzystania polecenia Test-WSMan dla lokalnego komputera został pokazany na rysunku 2. W pierwszym przypadku wygenerowany został błąd ponieważ usługa nie została jeszcze skonfigurowana, w drugim zaś funkcja zwraca kilka informacji na temat usługi WinRM.

Testowanie konfiguracji usługi WinRM

Rys. 2. Testowanie konfiguracji usługi WinRM.

Tworzenie zdalnej sesji

Za pomocą PowerShella można utworzyć trzy rodzaje zdalnych sesji:

  • Sesja interaktywna, która pozwala wykonywać polecenia bezpośrednio na zdalnym komputerze - jest to połączenie 1 do 1.
  • Sesja tymczasowa.
  • Stała sesja, która pozwala wykonywać skrypty na zdalnych komputerach - połączenie typu 1 do wielu.

Sesja interaktywna (1 do 1)

Do utworzenia interaktywnej zdalnej sesji służy polecenie Enter-PSSession -ComputerName NazwaKomputera, gdzie nazwa komputera to nazwa hosta, z którym chcemy nawiązać zdalną sesje. Na rysunku 3 pokazano nawiązanie nowej sesji ze zdalnym serwerem 2008 R2 w wersji core.

Nawiązanie sesji interaktywnej

Rys. 3. Nawiązanie sesji interaktywnej.

W sesji interaktywnej konsola PowerShella zostaje „przeniesiona" na zdalny komputer co oznacza, że wpisanie dowolnego polecenia spowoduje jego wykonanie na zdalnym komputerze. Dodatkowo w znaku zachęty konsoli pojawi się nazwa zdalnego komputera. Jako przykład sprawdzenia może posłużyć wykonanie polecenia hostname (rys. nr 3).

Po nawiązaniu sesji ze zdalnym komputerem możemy rozpocząć pracę wykorzystując znane polecenia PowerShella, np. do zarządzania usługami. Jeżeli jakieś cmdlet'y nie są dostępne, np. do obsługi serwera IIS lub Active Directory, możemy zaimportować odpowiedni moduł PowerShella.

W ramach jednego wystąpienia konsoli PowerShella w jednej chwili można nawiązać tylko jedną sesję interaktywną z jednym zdalnym komputerem.

Sesję interaktywną zamykamy poleceniem Exit-PSSession lub po prostu Exit

Sesja tymczasowa

Sesja tymczasowa jest tworzona na potrzeby wykonania konkretnego polecenia. Po zakończeniu wykonywania polecenia sesja jest automatycznie zamykana. Do wykonywania poleceń na zdalnych komputerach służy polecenie

Invoke-Command -ComputerName nazwaKomputera -scriptblock {polecenie PowerShella}

Na rysunku 4 widać, że zdalnie mogą być wykonywane również zwykłe polecenia konsoli. Jeżeli chcemy jednocześnie wykonać kilka poleceń to możemy rozdzielić je średnikami.

Wykonanie dwóch komend na zdalnym komputerze

Rys. 4. Wykonanie dwóch komend na zdalnym komputerze.

Polecenia można wykonywać jednocześnie na kilku zdalnych maszynach, wtedy należy w parametrze ComputerName wpisać nazwy wszystkich komputerów rozdzielonych przecinkami:

Invoke-Command -ComputerName komp1, komp2, komp3 -scriptblock {polecenie PowerShella}

Niektóre polecenia mogą być wykonywane dosyć długo co zablokuje nam dostęp do wpisywania kolejnych poleceń. W takich wypadkach można polecenie na zdalnym komputerze uruchomić w tle. Aby zostało ono w ten sposób uruchomione należy dodać parametr -AsJob (rysunek nr 5)

Wykonanie polecenia na zdalnej maszynie w tle

Rys. 5. Wykonanie polecenia na zdalnej maszynie w tle.

Sesje stałe (1 do wielu)

Jeżeli jednocześnie musimy wykonać jakiś skrypt na wielu komputerach to można utworzyć sesje stałe. Do utworzenia takiej sesji służy polecenie New-PSSession -ComputerName NazwaZdalnegoHosta. Przykład utworzenia stałej sesji został pokazany na rysunku nr 6.

Utworzenie stałej sesji

Rys. 6. Utworzenie stałej sesji.

Można utworzyć jedną sesję z jednym komputerem lub utworzyć kilka sesji z kilkoma komputerami za pomocą jednego polecenia. Przykładowa komenda nawiązująca sesję z kilkoma komputerami wygląda tak:

$parametrySesji = New-PSSession -ComputerName komputer1, komputer2

Wykonanie komendy spowodowałoby uruchomienie 3 sesji z trzema komputerami.

Wszystkie aktywne sesje możemy sprawdzić za pomocą polecenia Get-PSSession. Przykład zastosowania tego polecenia został pokazany na rysunku nr 7.

Wyświetlenie wszystkich aktywny sesji za pomocą polecenia Get-PSSession

Rys. 7. Wyświetlenie wszystkich aktywny sesji za pomocą polecenia Get-PSSession.

 

Skoro już wiemy jak nawiązać nowe połączenie, sprawdzić wszystkie aktywne sesje to pozostało jeszcze ustalić jak zamknąć sesję. Każdej ustanowionej sesji ze zdalnym komputerem będzie przydzielony unikatowy identyfikator ID. Wskazując odpowiedni identyfikator sesji będzie ją można zamknąć za pomocą polecenia Remove-PSSession -id IDSesji. Przykład zastosowania polecenia został pokazany na rysunku nr 8.

Zakończenie sesji o określonym ID

Rys. 8. Zakończenie sesji o określonym ID.

Po utworzeniu zdalnej sesji możemy przejść do wykonywania zadań na zdalnych maszynach. Kod będziemy uruchamiać za pomocą polecenia Invoke-command -session ParametrySesji -scriptblock {PoleceniePowerShella}

ParametrySesji jest najczęściej zmienną, w której przechowywane są dane na temat stałej sesji. Informacje te otrzymamy bądź z wyników działania komendy New-PSSessionlub Get-PSSession.

Np. aby wylistować procesy uruchomione na zdalnym komputerze możemy uruchomić polecenie:

Invoke-command -session $parametrySesji  -scriptblock {get-process}

Jeżeli lista komend która ma być uruchomiona na zdalnych komputerach jest dłuższa można umieścić je w skrypcie a następnie uruchomić go w zdalnej sesji:

Invoke-command -session $parametrySesji  -filepath .\przykladowySkypt.ps1

Różnica pomiędzy sesjami tymczasowymi a stałymi

Sesji tymczasowych nie trzeba oddzielnie tworzyć aby wykonać jakieś polecenia na zdalnych maszynach. Są one tworzone tylko na czas wykonania komendy. Z jednej strony jest to zaleta, a z drugie może być wadą. Gdybyśmy chcieli wyniki działania polecenia umieścić w jakiejś zmiennej, np.:

Invoke-Command -ComputerName komp1 -scriptblock {$proc = Get-Process}

to okaże się, że po ponownym odwołaniu do zmiennej $proc nie będzie ona posiadała żadnej wartości. Dzieje się tak dlatego, że zakres zmiennej obejmuje tylko sesję. Po jej zakończeniu tracimy dostęp do niej. Przedstawia to rysunek nr 9.

Problem z sesjami tymczasowymi

Rys. 9. Problem z sesjami tymczasowymi.

Rozwiązaniem tego problemu jest utworzenie sesji stałej. Zmienna również będzie w zasięgu tylko konkretnej sesji, ale jej wartość do czasu usunięcia sesji będzie dostępna. Pokazuje to rysunek nr 10.

Utrzymywanie wartości przez zmienną w ramach sesji

Rys. 10. Utrzymywanie wartości przez zmienną w ramach sesji.

Podsumowanie

W artykule zostały opisane wymagania jakie muszą być spełnione aby można było nawiązywać zdalne sesje za pomocą PowerShella. Omówiono również sposoby nawiązywania sesji oraz wykonywania komend na zdalnych maszynach.

PowerShell jest narzędziem bardzo mocnym w zastosowaniu na pojedynczych komputerach. Nic jednak nie stoi na przeszkodzie aby czynności wykonywane lokalnie można było uruchamiać na zdalnych komputerach czy serwerach. Np. sprawdzenie na wszystkich serwerach błędów w logach systemowych nie musi się wiązać z logowaniem na każdy komputer czy stosowania dodatkowego oprogramowania. Podobnie rozproszony Wystarczy parę linijek kodu w PowerShellu.

Więcej:

Patrz też:

Autor:

Marek Krupa

Marek Krupa
MCT

Kiedyś byłem Adminem… Znudziło mi się trochę, Los zapytał mnie, czy nie chciałbym uczyć. I tak zostałem trenerem, a dokładniej MCT. Tak jest do dzisiaj. Pomagam, uczę, naprowadzam, wspieram… Więcej na krupa.bazzar.pl


Komentarze 4 Masz uwagi do tej strony? Napisz

gregis_k 2011.05.17 7:36
0 oceń pozytywnie   oceń negatywnie 0
avatar
 

Extra materiał Marku .... poproszę o WIĘCEJ WIĘCEJ takich artykułów z PowerShella !

 

 

krupam 2011.05.17 12:10
0 oceń pozytywnie   oceń negatywnie 0
avatar Ekspert WSS
 

No dzięki! Jeżeli jest zainteresowanie i jakieś fajne tematy to nie mówię "nie" :)

 

 

Pozdrawiam

http://krupa.bazzar.pl

[Rozwiązałem Twój problem? Kliknij Rozwiązanie. Pomogłem Ci? kliknij Pomógł mi. ]

Pozdrawiam

http://krupa.bazzar.pl

T.Zbigniew 2011.05.20 13:38
0 oceń pozytywnie   oceń negatywnie 0
avatar
 

Super materiał - GRATULACJE !

 

Tylko mała poprawka zaraz na początku:

 

" Jego w jakim może być wykorzystywany jest bardzo szeroki."

 

Pozdrawiam,

Zbyszek

Pozdrawiam, Zbyszek
ziembor 2011.05.20 13:49
0 oceń pozytywnie   oceń negatywnie 0
avatar
 

Dzięki. Poprawione.

Ziemek Borowski - bywam na spotkaniach PEPUG i PInG, redaktor WSS.pl

 

-- Ziemek Borowski / agregat blogów ITPros@pl / PEPUG 

Dodaj komentarz

avatar

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.

Autor Marek Krupa
avatar Ekspert WSS
 

MCT, MCP, MCSA, MCSE, MCITP, MCTS

Załóż konto
WSS to serwis, który łączy dziesiątki tysięcy specjalistów IT w Polsce, zajmujących się szeroko pojętymi technologiami Microsoft. Portal działa od 2003 roku, i oprócz setek publikacji technicznych, rozwijającego się forum - portal to ludzie, którzy go tworzą. To właśnie z myślą o nich warto codziennie nas odwiedzać.

Dowiedz się więcej o WSS

vGuru - Zostań Guru Wirtualizacji

 

MetroOne

Idź na górę strony