Geek School Dowiedz się, jak korzystać z Remotingu w PowerShell
Jedną z najlepszych funkcji oferowanych przez PowerShell jest możliwość zdalnego zarządzania serwerami. Pozwala nawet zarządzać grupą jednocześnie.
Zapoznaj się z poprzednimi artykułami z serii:
- Dowiedz się, jak zautomatyzować system Windows za pomocą programu PowerShell
- Nauka korzystania z poleceń cmdlet w PowerShell
- Nauka korzystania z obiektów w PowerShell
- Nauka formatowania, filtrowania i porównywania w PowerShell
I pozostańcie czujni przez resztę serii przez cały tydzień.
Czym jest Remoting?
Zbiorcze zarządzanie serwerami może być uciążliwe, a jeśli musieliście wcześniej dokonać zmiany konfiguracji usług IIS na 50 serwerach, będziecie wiedzieć, o co mi chodzi. Są to sytuacje, w których PowerShell Remoting i zdolności językowe skryptów mogą przyjść na ratunek. Korzystając z protokołu HTTP lub bezpieczniejszego protokołu HTTPS, program PowerShell Remoting umożliwia wysyłanie poleceń do zdalnego komputera w sieci użytkownika. Następnie urządzenie uruchamia polecenia i odsyła dane wyjściowe, które z kolei są wyświetlane na ekranie.
Zdobądźmy techniczne
Rdzeniem PowerShell Remoting jest jedna usługa Windows, usługa Zdalnego zarządzania Windows lub usługa WinRM, która stała się znana. Korzystając z WinRM, możesz skonfigurować jedną lub więcej konfiguracji sesji (zwanych także punktami końcowymi), które zasadniczo są plikami zawierającymi informacje o doświadczeniu, które chcesz przekazać osobie łączącej się ze zdalną instancją PowerShell. Dokładniej, możesz użyć plików konfiguracji sesji, aby zdefiniować, kto może i kto nie może się połączyć z instancją, jakie cmdlety i skrypty mogą uruchamiać, a także jaki kontekst zabezpieczeń musi być uruchamiany w ramach sesji. Korzystając z usługi WinRM, konfigurujesz także "detektory", które nasłuchują przychodzących żądań PowerShella. Te "słuchacze" mogą być HTTP lub HTTPS i mogą być przypisani do jednego adresu IP na twoim komputerze. Po otwarciu połączenia PowerShell z innym komputerem (technicznie odbywa się to przy użyciu protokołu WS-MAN opartego na protokole HTTP), połączenie zostaje powiązane z jednym z tych "nasłuchujących". "Odbiorcy" są wówczas odpowiedzialni za wysyłanie ruchu do aplikacji powiązanej z odpowiednim plikiem konfiguracji sesji; aplikacja (zazwyczaj PowerShell, ale możesz mieć inne aplikacje hostingowe, jeśli chcesz), uruchamia polecenie i przesyła wyniki z powrotem przez "słuchacza" przez sieć i z powrotem na twoją maszynę.
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 następujące:
Włącz-PSRemotowanie
Będziesz musiał odpowiedzieć "tak" na wszystkie monity. Po uruchomieniu Enable-PSRemoting, wprowadza się kilka zmian na komputerze:
- Uruchomi się usługa WinRM.
- Usługa WinRM zmienia się z trybu ręcznego uruchamiania na tryb automatyczny.
- Tworzy odbiornik HTTP, który jest powiązany z wszystkimi kartami sieciowymi.
- Tworzy także wyjątek zapory przychodzącej dla protokołu WS-MAN.
- Tworzone są domyślne konfiguracje sesji
Jeśli korzystasz z systemu Windows 7, a lokalizacja karty sieciowej jest ustawiona na Publiczna, włączenie funkcji PowerShell Remoting zakończy się niepowodzeniem. Aby to naprawić, wystarczy przejść do lokalizacji sieci domowej lub służbowej. Możesz również pominąć sprawdzanie sieci, wykonując następujące czynności:
Włącz-PSRemotowanie -SkipNetworkProfileCheck
Zalecamy jednak raczej zmienić lokalizację w sieci.
Istnieją dwa sposoby połączenia z innym komputerem za pomocą PowerShell. Jest jedna do jednej metody, która jest bardzo podobna do używania SSH, a następnie jest jedna do wielu metod.
Korzystanie z sesji PowerShell
Pierwszy sposób połączenia ze zdalnym komputerem za pomocą PowerShell wykorzystuje coś, co nazywa się sesją PowerShell. Po prostu sesja pozwala na uruchamianie poleceń na zdalnym komputerze w sposób interaktywny, podobnie jak na własnej maszynie. Aby otworzyć sesję, wystarczy wpisać:
Enter-PSSession - Nazwa komputera "Darlah"
Monit ten zyska prefiks, który oznacza maszynę, na której uruchamiasz polecenia cmdlet.
Stąd możesz naprawdę traktować monity tak, jakbyś siedział na zdalnej maszynie. Na przykład, jeśli chcesz zobaczyć wszystkie pliki na dysku C: \, możesz zrobić proste:
Get-ChildItem -Path C: \
Jeśli pochodzisz z Linuksa, możesz pomyśleć o zastosowaniu tej jednej na jedną metodę zdalnego działania jako alternatywy PowerShell do SSH.
Korzystanie z Invoke-Command
Drugi sposób korzystania z PowerShell na zdalnym komputerze odbywa się za pomocą polecenia Invoke-Command. Zaletą korzystania z Invoke-Command jest fakt, że można 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ń z serwerów. Polecenie Invoke-Command ma następującą składnię:
Invoke-Command-ComputerName Darlah, localhost -ScriptBlock Get-EventLog Application -Newest 2
Ponieważ polecenie jest wykonywane równolegle na wszystkich komputerach, będziesz potrzebował jakiegoś sposobu sprawdzenia, z którego komputera pochodzi dany wynik. Możesz to zrobić, patrząc na właściwość PSComputerName.
Gdy używasz polecenia wzywania, nie masz już obiektów, których możesz oczekiwać w potoku. Rozumie się, że aby PowerShell mógł pobrać informacje ze zdalnego komputera z powrotem do twojego komputera, muszą one w jakiś sposób reprezentować obiekty, które polecenie uruchomiło na wyjściach komputera zdalnego. Obecnie wydaje się, że wybranym sposobem reprezentowania hierarchicznej struktury danych jest użycie XML, co oznacza, że kiedy wydajesz komendę za pomocą polecenia Invoke-Command, wyniki są najpierw serializowane do XML, zanim zostaną odesłane do twojego komputera. Po powrocie do komputera są one ponownie przekształcane do postaci z powrotem w obiekt; chodzi o to, że gdy są deserializowane, wszystkie metody, z wyjątkiem metody ToString (), że obiekt został usunięty z niego.
Uwaga: Istnieje kilka wyjątków od tej reguły, na przykład większość prymitywnych typów, takich jak liczby całkowite, może być deserializowana z uwzględnieniem zawartych w niej metod. Istnieje również proces o nazwie Rehydration, w którym niektóre metody można dodać z powrotem do deserializowanych obiektów. Więc bądź ostrożny i pamiętaj, że Get-Member jest twoim przyjacielem.
Zadanie domowe
- Przeczytaj tajemnice PowerShell Remoting ebook Don Jones.