- Funkcja zdalnego dostępu wykorzystuje WinRM/WS-Man (HTTP/HTTPS) i umożliwia sesje 1-do-1, 1-do-wielu oraz sesje trwałe z kontrolą bezpieczeństwa.
- Enable-PSRemoting konfiguruje usługę, programy nasłuchujące i zaporę; protokół HTTPS wymaga ważnego certyfikatu i zgodności CN/SAN.
- Wyniki są zwracane w postaci deserializacji; metody są wywoływane w zdalnym bloku skryptu, a niestandardowe punkty końcowe są używane do szczegółowego delegowania.
Możliwe, że wiele zadań możesz już zautomatyzować lokalnie za pomocą programu PowerShell, ale gdzie tak naprawdę Zdalna obsługa programu PowerShell robi różnicę Polega na uruchamianiu poleceń na komputerach zdalnych, niezależnie od tego, czy jest ich kilka, czy setki, interaktywnie lub równolegle. Technologia ta, dostępna od wersji Windows PowerShell 2.0 i udoskonalona od wersji 3.0, opiera się na WS-Management (WinRM) i konwertuje PowerShell w solidnym, skalowalnym i bezpiecznym kanale zdalnego zarządzania.
Przede wszystkim ważne jest zrozumienie dwóch kluczowych idei: poleceń cmdlet z -Parametr ComputerName (np. Get-Process lub Get-Service) nie są długoterminową ścieżką zalecaną przez firmę Microsoft, a funkcja PowerShell Remoting nie działa jako „hack”. W rzeczywistości wymusza wzajemne uwierzytelnianie, rejestruje audyty i szanuje Twoje zwykłe uprawnienia, nie przechowując danych logowania ani nie uruchamiając magicznie czegokolwiek z super uprawnieniami.
Czym jest PowerShell Remoting i dlaczego warto z niego korzystać?
z PowerShell Remoting możesz wykonaj niemal każde polecenie zdalnie Można je uruchamiać w sesji lokalnej, od zapytań do usług po wdrażanie konfiguracji, i to na setkach komputerów jednocześnie. W przeciwieństwie do poleceń cmdlet akceptujących parametr -ComputerName (wiele z nich korzysta z DCOM/RPC), Remoting podróżuje przez WS-Man (HTTP/HTTPS), który jest bardziej przyjazny dla zapory sieciowej, pozwala na paralelizm i przekazuje pracę zdalnemu hostowi, a nie klientowi.
Przekłada się to na trzy praktyczne korzyści: lepszą wydajność przy masowych realizacjach, mniejsze tarcie w sieciach z restrykcyjnymi regułami i modelem bezpieczeństwa zgodnym z Kerberos/HTTPS. Co więcej, nie wymagając od każdego polecenia cmdlet implementacji własnego zdalnego, zdalnego Działa w przypadku każdego skryptu lub roli który jest dostępny w miejscu docelowym.
Domyślnie w najnowszych serwerach Windows funkcja zdalnego sterowania jest włączona; w systemach Windows 10/11 aktywujesz to za pomocą jednego polecenia cmdlet. I tak, możesz używać alternatywnych poświadczeń, trwałych sesji, niestandardowych punktów końcowych i nie tylko.
Uwaga: Zdalne zarządzanie nie jest równoznaczne z otwarciem wszystkiego. Domyślnie tylko administratorzy Mogą się łączyć, a działania są wykonywane pod ich tożsamością. Jeśli potrzebujesz precyzyjnej delegacji, niestandardowe punkty końcowe pozwalają na udostępnienie tylko niezbędnych poleceń.

Jak to działa od środka: WinRM, WS-Man i porty
PowerShell Remoting działa w modelu klient-serwer. Klient wysyła żądania WS-Management za pośrednictwem HTTP (5985/TCP) lub HTTPS (5986/TCP)Na komputerze docelowym usługa Windows Remote Management (WinRM) nasłuchuje, rozpoznaje punkt końcowy (konfiguracja sesji) i hostuje sesję programu PowerShell w tle (proces wsmprovhost.exe). zwracanie klientowi wyników serializowanych w XML poprzez SOAP.
Przy pierwszym włączeniu funkcji Remoting konfigurowane są odbiorniki, otwierany jest odpowiedni wyjątek zapory i tworzone są konfiguracje sesji. Od wersji PowerShell 6+ wiele edycji współistnieje, a Włącz-PSRemoting Rejestruje punkty końcowe o nazwach odzwierciedlających wersję (na przykład PowerShell.7 i PowerShell.7.xy).
Jeśli w swoim środowisku zezwalasz wyłącznie na protokół HTTPS, możesz utworzyć bezpieczny słuchacz z certyfikatem wydanym przez zaufany urząd certyfikacji (zalecane). Alternatywą jest korzystanie z TrustedHosts w ograniczonym zakresie, z uwzględnieniem ryzyka, w scenariuszach grup roboczych lub na komputerach spoza domeny.
Należy pamiętać, że funkcja PowerShell Remoting może współistnieć z poleceniami cmdlet z opcją -ComputerName, ale Microsoft promuje WS-Man jako standardowy i przyszłościowy sposób zdalnego administrowania.
Włączanie zdalnego dostępu programu PowerShell i przydatnych parametrów
W systemie Windows wystarczy otworzyć program PowerShell jako administrator i uruchomić Włącz-PSRemotingSystem uruchamia WinRM, konfiguruje autostart, włącza nasłuchiwacz i tworzy odpowiednie reguły zapory. Na klientach z publicznym profilem sieciowym można to celowo zezwolić za pomocą -PomińSprawdzanieProfiluSieciowego (a następnie wzmocnij konkretnymi zasadami):
Enable-PSRemoting
Enable-PSRemoting -Force
Enable-PSRemoting -SkipNetworkProfileCheck -Force
Składnia pozwala również na: -Potwierdzać y -Co jeśli do kontroli zmian. Pamiętaj: Dostępny jest tylko w systemie Windows, i musisz uruchomić konsolę z podwyższonym poziomem uprawnień. Tworzone reguły różnią się w zależności od wersji serwerowej i klienckiej, szczególnie w sieciach publicznych, gdzie domyślnie są ograniczone do podsieci lokalnej, chyba że rozszerzysz zakres (na przykład za pomocą polecenia Set-NetFirewallRule).
Aby wyświetlić listę już zarejestrowanych konfiguracji sesji i potwierdzić, że wszystko jest gotowe, użyj Pobierz-PSSessionConfigurationJeśli pojawią się punkty końcowe PowerShell.x i (o ile ma to zastosowanie) Workflow, infrastruktura Remoting jest gotowa do działania.

Tryby użytkowania: 1 do 1, 1 do wielu i sesje trwałe
Jeśli potrzebujesz interaktywnej konsoli na jednym komputerze, skorzystaj z Enter-PSSessionPojawi się monit, a wszystkie Twoje działania zostaną przesłane na host zdalny. Możesz ponownie wykorzystać dane uwierzytelniające za pomocą polecenia Get-Credential, aby uniknąć ciągłego ich ponownego wprowadzania:
$cred = Get-Credential
Enter-PSSession -ComputerName dc01 -Credential $cred
Exit-PSSession
Jeśli szukasz narzędzia umożliwiającego wysyłanie poleceń do kilku komputerów jednocześnie, to jest to Invoke-Command z blokiem skryptu. Domyślnie uruchamia do 32 równoczesnych połączeń (można to regulować parametrem -ThrottleLimit). Wyniki są zwracane jako zdeserializowane obiekty (bez metod „na żywo”):
Invoke-Command -ComputerName dc01,sql02,web01 -ScriptBlock { Get-Service -Name W32Time } -Credential $cred
Musisz wywołać metodę taką jak .Stop() lub .Start()? Zrób to. wewnątrz bloku skryptu w kontekście zdalnym, a nie lokalnie zdeserializowanym obiekcie, i to wszystko. Jeśli istnieje odpowiednik polecenia cmdlet (Stop-Service/Start-Service), zazwyczaj lepiej jest go użyć dla przejrzystości.
Aby uniknąć kosztów rozpoczęcia i zakończenia sesji podczas każdego połączenia, utwórz Trwała sesja PSSession i ponownie go używać w wielu wywołaniach. Użyj New-PSSession, aby utworzyć połączenie, i Invoke-Command-Session, aby ponownie użyć tunelu. Nie zapomnij zamknąć go poleceniem Remove-PSSession po zakończeniu.
Serializacja, ograniczenia i dobre praktyki
Ważny szczegół: podczas podróży obiekty „+spłaszczają się” i docierają jako deserializowane migawki, z właściwościami, ale bez metod. Jest to celowe i oszczędza przepustowość, ale oznacza, że nie można używać elementów, które wykonują logikę (np. .Kill()) na kopii lokalnej. Rozwiązanie jest oczywiste: należy wywołać te metody. zdalnie a jeśli potrzebujesz tylko niektórych pól, użyj filtra Select-Object, aby przesłać mniej danych.
W skryptach unikaj Enter-PSSession (przeznaczonego do użytku interaktywnego) i używaj Invoke-Command z blokami skryptów. Jeśli przewidujesz wielokrotne wywołania lub musisz zachować stan (zmienne, importowane moduły), użyj trwałych sesji i, jeśli to możliwe, rozłącz je i ponownie podłącz za pomocą Disconnect-PSSession/Connect-PSSession w programie PowerShell 3.0+.
Uwierzytelnianie, HTTPS i scenariusze poza domeną
W domenie uwierzytelnianie natywne to Kerberos I wszystko działa. Gdy urządzenie nie może zweryfikować nazwy serwera lub łączysz się z adresem IP CNAME lub aliasem, potrzebujesz jednej z dwóch opcji: 1) Odbiornik HTTPS z certyfikatem wydane przez zaufany urząd certyfikacji lub 2) dodaj miejsce docelowe (nazwę lub adres IP) do TrustedHosts i użyj danych uwierzytelniającychDruga opcja wyłącza wzajemne uwierzytelnianie dla danego hosta, co ogranicza zakres do niezbędnego minimum.
Konfiguracja odbiornika HTTPS wymaga certyfikatu (najlepiej z PKI lub publicznego urzędu certyfikacji), zainstalowanego w magazynie zespołu i powiązanego z WinRM. Port 5986/TCP jest następnie otwierany w zaporze i używany przez klienta. -Użyj SSL w zdalnych poleceniach cmdlet. W celu uwierzytelnienia certyfikatu klienta możesz zmapować certyfikat do konta lokalnego i połączyć się z -Odcisk palca certyfikatu (Enter-PSSession nie akceptuje tego bezpośrednio; należy najpierw utworzyć sesję za pomocą New-PSSession.)
Drugi skok i delegowanie uprawnień
Znany „podwójny przeskok” pojawia się, gdy po połączeniu się z serwerem potrzebujesz dostępu do serwera. trzeci zasób w Twoim imieniu (np. udział SMB). Istnieją dwa podejścia do tego: CredSSP i delegowanie Kerberos z ograniczeniami opartymi na zasobach.
z KredytSSP Umożliwiasz klientowi i pośrednikowi jawne delegowanie poświadczeń i ustawiasz politykę (GPO), która zezwala na delegowanie do określonych komputerów. Konfiguracja jest szybka, ale mniej bezpieczna, ponieważ poświadczenia przesyłane są w postaci jawnego tekstu w szyfrowanym tunelu. Zawsze ograniczaj źródła i miejsca docelowe.
Preferowaną alternatywą w domenie jest ograniczone delegowanie Kerberos (ograniczona delegacja oparta na zasobach) w nowoczesnej usłudze Active Directory. Pozwala to punktowi końcowemu polegać na otrzymywaniu delegacji od punktu pośredniczącego dla określonych usług, unikając ujawniania tożsamości użytkownika przy pierwszym połączeniu. Wymagane są najnowsze kontrolery domeny i zaktualizowany RSAT.
Niestandardowe punkty końcowe (konfiguracje sesji)
Jedną z perełek zdalnego dostępu jest możliwość rejestrowania punktów połączeń dostosowane możliwości i ograniczeniaNajpierw generujesz plik za pomocą New-PSSessionConfigurationFile (moduły do wstępnego załadowania, widoczne funkcje, aliasy, ExecutionPolicy, LanguageMode itd.), a następnie rejestrujesz go za pomocą Register-PSSessionConfiguration, gdzie możesz ustawić Uruchom jako poświadczenie i uprawnienia (interfejs SDDL lub GUI z opcją -ShowSecurityDescriptorUI).
Aby zapewnić bezpieczne delegowanie, udostępniaj tylko to, co jest niezbędne, za pomocą opcji -VisibleCmdlets/-VisibleFunctions i w razie potrzeby wyłącz swobodne wykonywanie skryptów za pomocą Tryb językowy Ograniczony język lub NoLanguage. Jeśli opuścisz FullLanguage, ktoś może użyć bloku skryptu do wywołania nieeksponowanych poleceń, co w połączeniu z RunAs, to byłaby dziura. Zaprojektuj te punkty końcowe z dużą rozwagą i udokumentuj ich zakres.
Domeny, obiekty GPO i oprogramowanie grupowe
W usłudze AD można wdrożyć usługę PowerShell Remoting na dużą skalę za pomocą obiektu GPO: umożliwia to automatyczną konfigurację odbiorników usługi WinRM, ustaw usługę na Automatycznąi utwórz wyjątek zapory. Pamiętaj, że obiekty zasad grupy (GPO) zmieniają ustawienia, ale nie zawsze włączają usługę natychmiast; czasami konieczne jest ponowne uruchomienie lub wymuszenie aktualizacji gpupdate.
W grupach roboczych (niedomenowych) skonfiguruj funkcję Remoting za pomocą Włącz-PSRemoting, ustaw TrustedHosts na kliencie (winrm set winrm/config/client @{TrustedHosts=»host1,host2″}) i użyj lokalnych poświadczeń. W przypadku protokołu HTTPS możesz zamontować certyfikaty podpisane przez siebie, choć zaleca się korzystanie z zaufanego urzędu certyfikacji i zweryfikuj nazwę którego użyjesz w polu -ComputerName w certyfikacie (zgodność CN/SAN).
Kluczowe polecenia cmdlet i składnia
Garstka komandosów osłania 90% codziennych scenariuszyAby aktywować/dezaktywować:
Enable-PSRemoting
Disable-PSRemoting
Sesja interaktywna 1 do 1 i wyjście:
Enter-PSSession -ComputerName SEC504STUDENT
Exit-PSSession
1 do wielu, z paralelizmem i poświadczeniami:
Invoke-Command -ComputerName dc01,sql02,web01 -ScriptBlock { Get-Service W32Time } -Credential $cred
Trwałe sesje i ponownie wykorzystać:
$s = New-PSSession -ComputerName localhost -ConfigurationName PowerShell.7
Invoke-Command -Session $s -ScriptBlock { $PSVersionTable }
Remove-PSSession $s
Testowanie i WinRM Użyteczne:
Test-WSMan -ComputerName host
winrm get winrm/config
winrm enumerate winrm/config/listener
winrm quickconfig -transport:https
Praktyczne uwagi dotyczące zapór sieciowych, sieci i portów
Otwórz port 5985/TCP dla protokołu HTTP i port 5986/TCP dla protokołu HTTPS na komputerze docelowym i na komputerze docelowym. dowolna pośrednia zapora sieciowaW przypadku klientów Windows polecenie Enable-PSRemoting tworzy reguły dla profili domeny i prywatnych; w przypadku profili publicznych jest ono ograniczone do lokalnej podsieci, chyba że zakres zostanie zmodyfikowany poleceniem Set-NetFirewallRule -RemoteAddress Any (wartość, którą można ocenić na podstawie ryzyka).
Jeśli używasz integracji SOAR/SIEM, które uruchamiają polecenia zdalne (np. z XSOAR), upewnij się, że serwer ma Rozdzielczość DNS do hostów, łączność z portami 5985/5986 oraz poświadczenia z wystarczającymi uprawnieniami lokalnymi. W niektórych przypadkach uwierzytelnianie NTLM/podstawowe może wymagać dostosowania (np. użycie użytkownika lokalnego w wersji podstawowej z SSL).
Parametry Enable-PSRemoting (podsumowanie operacyjne)
-Confirm prosi o potwierdzenie przed wykonaniem; -Force ignoruje ostrzeżenia i wprowadź niezbędne zmiany; -SkipNetworkProfileCheck włącza zdalne zarządzanie w publicznych sieciach klienckich (domyślnie ograniczone do podsieci lokalnej); -WhatIf pokazuje, co by się stało bez wprowadzania zmian. Dodatkowo, jak każde standardowe polecenie cmdlet, obsługuje wspólne parametry (-Verbose, -ErrorAction, itd.).
Pamiętaj, że opcja „Włącz” nie tworzy dla Ciebie odbiorników HTTPS ani certyfikatów; jeśli od początku potrzebujesz szyfrowania typu end-to-end i uwierzytelniania opartego na certyfikat, skonfiguruj program nasłuchujący HTTPS i sprawdź CN/SAN na podstawie nazwy, której użyjesz w -ComputerName.
Przydatne polecenia zdalne WinRM i PowerShell
Niektórzy niezbędne przedmioty przy łóżku na co dzień:
winrm get winrm/config
winrm enumerate winrm/config/listener
Set-NetFirewallRule -Name 'WINRM-HTTP-In-TCP' -RemoteAddress Any
Test-WSMan -ComputerName host -Authentication Default -Credential (Get-Credential)
New-PSSession -ComputerName host
Enter-PSSession -ComputerName host
Enable-PSRemoting -SkipNetworkProfileCheck -Force
W przypadku zarządzania systemem Windows na dużą skalę, Remoting pozwala na przejście od podejścia „komputer-komputer” do podejścia deklaratywnego i bezpiecznego. Łącząc trwałe sesje, silne uwierzytelnianie (Kerberos/HTTPS), ograniczone punkty końcowe i wyraźne ślady diagnostyczne, zyskujesz prędkość i kontrolę Bez poświęcania bezpieczeństwa i audytu. Jeśli dodatkowo ujednolicisz aktywację GPO i opanujesz przypadki specjalne (TrustedHosts, podwójny przeskok, certyfikaty), zyskasz solidną platformę zdalną do codziennych operacji i reagowania na incydenty.
Redaktor specjalizujący się w zagadnieniach technologii i Internetu z ponad dziesięcioletnim doświadczeniem w różnych mediach cyfrowych. Pracowałem jako redaktor i twórca treści dla firm z branży e-commerce, komunikacji, marketingu online i reklamy. Pisałem także na portalach poświęconych ekonomii, finansom i innym branżom. Moja praca jest także moją pasją. Teraz, poprzez moje artykuły w Tecnobits, staram się odkrywać wszystkie nowości i nowe możliwości, jakie świat technologii oferuje nam każdego dnia, aby poprawić nasze życie.