
Jedną z najlepszych funkcji oferowanych przez PowerShell jest możliwość zdalnego zarządzania serwerami. Pozwala nawet zarządzać kilkoma z nich jednocześnie.
Koniecznie przeczytaj poprzednie artykuły z serii:
- Dowiedz się, jak zautomatyzować system Windows za pomocą PowerShell
- Nauka korzystania z poleceń cmdlet w PowerShell
- Nauka korzystania z obiektów w PowerShell
- Nauka formatowania, filtrowania i porównywania w PowerShell
I czekaj na resztę serii przez cały tydzień.
Co to jest komunikacja zdalna?
Masowe zarządzanie serwerami może być żmudne, a jeśli wcześniej musiałeś dokonać zmiany w konfiguracji IIS na 50 serwerach internetowych, będziesz wiedział, o co mi chodzi. Są to sytuacje, w których na ratunek może przyjść PowerShell Remoting i zdolności skryptowe języka. Korzystając z protokołu HTTP lub bezpieczniejszego protokołu HTTPS, usługa PowerShell Remoting umożliwia wysyłanie poleceń do zdalnego komputera w sieci. Maszyna następnie uruchamia polecenia i wysyła dane wyjściowe z powrotem do Ciebie, które z kolei są wyświetlane na ekranie.
Przejdźmy do kwestii technicznych
Rdzeniem PowerShell Remoting jest pojedyncza usługa Windows, Windows Remote Management lub usługa WinRM, jak to się stało. Korzystając z WinRM, możesz skonfigurować jedną lub więcej konfiguracji sesji (zwanych również punktami końcowymi), które są w zasadzie plikami zawierającymi informacje o środowisku, które chcesz udostępnić osobie łączącej się ze zdalną instancją PowerShell. Mówiąc dokładniej, można użyć plików konfiguracji sesji, aby określić, kto może, a kto nie może łączyć się z instancją, jakie polecenia cmdlet i skrypty mogą być uruchamiane, a także w jakim kontekście zabezpieczeń sesja musi być uruchomiona. Korzystając z usługi WinRM, konfigurujesz również „nasłuchiwania”, które nasłuchują przychodzących żądań PowerShell. Te „odbiorniki” mogą być albo HTTP, albo HTTPS i mogą być powiązane z jednym adresem IP na twoim komputerze. Gdy otworzysz połączenie PowerShell z inną maszyną (technicznie odbywa się to za pomocą protokołu WS-MAN, który jest oparty na HTTP), połączenie zostanie powiązane z jednym z tych „odbiorników”. „Odbiorniki” są wtedy odpowiedzialne za wysyłanie ruchu do aplikacji powiązanej z odpowiednim plikiem konfiguracyjnym sesji; aplikacja (zwykle PowerShell, ale możesz mieć inne aplikacje hostingowe, jeśli chcesz), a następnie uruchamia polecenie i przesyła wyniki z powrotem przez „odbiornik” przez sieć iz powrotem na komputer.
Pokaż mi jak
Pierwszą rzeczą, którą musisz zrobić, to włączyć Remoting na komputerze, z którym chcesz się połączyć. Można to zrobić, uruchamiając:
Włącz-PSRemoting
Będziesz musiał odpowiedzieć twierdząco na wszystkie monity. Po uruchomieniu Enable-PSRemoting na komputerze wprowadzanych jest kilka zmian:
- Uruchomi się usługa WinRM.
- Usługa WinRM zmienia się z trybu uruchamiania ręcznego na automatyczny.
- Tworzy odbiornik HTTP, który jest powiązany ze wszystkimi kartami sieciowymi.
- Tworzy również wyjątek zapory przychodzącej dla protokołu WS-MAN.
- Tworzone są niektóre domyślne konfiguracje sesji
Jeśli używasz systemu Windows 7, a lokalizacja karty sieciowej jest ustawiona na Publiczna, włączenie usługi PowerShell Remoting nie powiedzie się. Aby to naprawić, po prostu przełącz się na lokalizację sieci Dom lub Praca. Alternatywnie możesz pominąć sprawdzanie sieci, wykonując następujące czynności:
Włącz-PSRemoting – SkipNetworkProfileCheck
Zalecamy jednak zmianę lokalizacji sieciowej.
Istnieją dwa sposoby łączenia się z inną maszyną za pomocą PowerShell. Istnieje metoda jeden do jednego, która jest bardzo podobna do korzystania z SSH, a także metoda jeden do wielu.
Korzystanie z sesji PowerShell
Pierwszym sposobem łączenia się ze zdalną maszyną za pomocą PowerShell jest użycie czegoś, co nazywa się sesją PowerShell. Wystarczy umieścić sesję, aby interaktywnie uruchamiać polecenia na zdalnym komputerze, podobnie jak na własnym komputerze. Aby otworzyć sesję, po prostu wpisz następujące polecenie:
Enter-PSSession – nazwa komputera „Darlah”
Monit otrzyma prefiks oznaczający komputer, na którym uruchamiane są polecenia cmdlet.
Stąd możesz naprawdę traktować monit tak, jakbyś siedział przy zdalnym komputerze. Na przykład, jeśli chcesz zobaczyć wszystkie pliki na dysku C:, możesz zrobić proste:
Get-ChildItem – Ścieżka C:
Jeśli pochodzisz z systemu Linux, możesz pomyśleć o użyciu tej metody komunikacji zdalnej jako alternatywy PowerShell dla SSH.
Korzystanie z polecenia wywołania
Drugim sposobem użycia PowerShell na komputerze zdalnym jest użycie polecenia Invoke-Command. Zaletą korzystania z polecenia Invoke-Command jest to, że możesz wykonać to samo polecenie na wielu komputerach jednocześnie. Jak możesz sobie wyobrazić, jest to szczególnie przydatne, gdy chcesz zrobić coś takiego, jak zbieranie dzienników zdarzeń ze swoich serwerów. Invoke-Command ma następującą składnię:
Invoke-Command -ComputerName Darlah,localhost -ScriptBlock {Aplikacja Get-EventLog -Newest 2}
Ponieważ polecenie jest wykonywane równolegle na wszystkich komputerach, będziesz potrzebować sposobu, aby zobaczyć, z którego komputera pochodzi dany wynik. Możesz to zrobić, patrząc na właściwość PSComputerName.
Gdy używasz polecenia Invoke-Command, nie masz już obiektów, których możesz oczekiwać w potoku. Widzisz, aby PowerShell mógł pobrać informacje ze zdalnej maszyny z powrotem na twoją maszynę, potrzebują pewnego sposobu reprezentowania obiektów, które polecenie uruchomiłeś na wyjściu maszyny zdalnej. W dzisiejszych czasach wydaje się, że wybranym sposobem reprezentowania hierarchicznej struktury danych jest użycie XML, co oznacza, że kiedy wydajesz polecenie za pomocą polecenia Invoke-Command, wyniki są najpierw serializowane do XML, zanim zostaną wysłane z powrotem do twojego komputera. Gdy wrócą do twojej maszyny, zostaną zdeserializowane z powrotem do obiektu; problem polega na tym, że gdy są deserializowane, wszystkie metody, z wyjątkiem metody ToString(), które obiekt miał, są z niego usuwane.
Uwaga: Istnieją pewne wyjątki od tej reguły, na przykład większość typów pierwotnych, takich jak liczby całkowite, można zdeserializować z dołączonymi metodami. Istnieje również proces zwany Rehydratacją, w którym niektóre metody można ponownie dodać do zdeserializowanych obiektów. Więc bądź ostrożny i pamiętaj, że Get-Member jest twoim przyjacielem.