6Sep

Geek School: Naucz się 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ń Cmdlets w programie PowerShell
  • Nauka korzystania z obiektów w programie PowerShell
  • Nauka formatowania, filtrowania i porównywania w programie PowerShell

Pozostań tak przygotowanareszta serii przez cały tydzień.

Czym jest Remoting?

Masowe zarządzanie serwerami może być uciążliwe, a jeśli wcześniej musiałaś zmienić konfigurację IIS na 50 serwerach, będziesz wiedział, co mam na myśli. 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.

Uzyskajmy techniczne

Podstawą PowerShell Remoting jest jedna usługa Windows, usługa Windows Remote Management 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 w zasadzie 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 konfiguracyjnych sesji, aby określić, 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, ustawiasz 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, który jest oparty na protokole HTTP), połączenie jest powiązane z jednym z tych "detektorów"."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 twój 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 następujące:

Enable-PSRemoting

Będziesz musiał odpowiedzieć tak dla wszystkich monitów. Po uruchomieniu Enable-PSRemoting, wprowadzanych jest kilka zmian na komputerze:

  • Uruchomiona zostaje usługa WinRM.
  • Usługa WinRM zmienia się z trybu ręcznego uruchamiania na tryb automatyczny.
  • Tworzy odbiornik HTTP powiązany z wszystkimi kartami sieciowymi.
  • Tworzy również wyjątek zapory ogniowej dla protokołu WS-MAN.
  • Niektóre domyślne konfiguracje sesji są tworzone

Jeśli korzystasz z systemu Windows 7, a lokalizacja karty sieciowej jest ustawiona na Publiczny, włączenie 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, używając:

Włącz-PSRemotowanie -SkipNetworkProfileCheck

Zalecamy jednak raczej zmienić lokalizację sieciową.

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 istnieje jedna do wielu metod.

Korzystanie z sesji PowerShell

Pierwszym sposobem połączenia ze zdalnym komputerem przy użyciu programu PowerShell jest użycie czegoś nazywanego 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ę, wpisz następujące polecenie:

Enter-PSSession - Nazwa komputera "Darlah"

Monit będzie zyskiwał prefiks oznaczający komputer, na którym uruchamiasz polecenia cmdlet.

Tutaj można naprawdę potraktować prompt tak, jakbyś siedział na zdalnym komputerze. 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 użyciu tej jednej na jedną metodę zdalnego działania jako alternatywę 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 -Nazwa-komputer-Darlah, localhost -ScriptBlock{ Get-EventLog Application -Newest 2}

Ponieważ polecenie jest wykonywane równolegle na wszystkich komputerach, będziesz potrzebował jakiś sposób, aby zobaczyć, który komputer adany wynik pochodzi. Możesz to zrobić, patrząc na właściwość PSComputerName.

Podczas korzystania z Invoke-Command nie ma już obiektów, których można oczekiwać w potoku. Widzisz, aby PowerShell mógł pobrać informacje ze zdalnego komputera z powrotem do twojego komputera, potrzebuje sposobu reprezentacji obiektów, które polecenie uruchomiłeś na wyjściach maszyny zdalnej. 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ą 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.

Praca domowa

  • Przeczytaj tajemnice PowerShella Remoting ebook autorstwa Dona Jonesa.