New-PSSession to polecenie PowerShell, które tworzy trwałą sesję zdalną (obiekt typu PSSession) do jednego lub wielu komputerów. W odróżnieniu od Invoke-Command uruchamianego ad hoc, sesja utworzona przez New-PSSession żyje dalej i możesz jej używać wielokrotnie. To znaczy: zmienne, załadowane moduły i stan środowiska po stronie zdalnej maszyny zostają zachowane między kolejnymi poleceniami. Idealne, gdy masz serię zadań na tym samym serwerze i nie chcesz za każdym razem płacić kosztem nawiązywania połączenia. Pod spodem korzysta z WS-Management (WinRM), więc na zdalnej maszynie musi działać usługa WinRM.
Składnia i najważniejsze opcje
Podstawowa forma: New-PSSession [-ComputerName]
-ComputerName— lista nazw lub adresów komputerów; dla każdego powstaje osobna sesja.-Credential— poświadczenia użytkownika, na którego się logujesz (np. zGet-Credential).-Name— nadaje sesji przyjazną nazwę, żebyś łatwiej ją odnalazł na liście.-Port— port WinRM, jeśli odbiega od domyślnego (5985 dla HTTP, 5986 dla HTTPS).-UseSSL— wymusza połączenie po HTTPS zamiast HTTP, czyli szyfrowanie transportu.-Authentication— mechanizm uwierzytelniania (Default,Kerberos,Negotiate,CredSSPi inne).-ConfigurationName— punkt końcowy sesji; domyślnieMicrosoft.PowerShell.-SessionOption— dodatkowe ustawienia zNew-PSSessionOption(timeouty, proxy itp.).
Przykłady użycia
$s = New-PSSession -ComputerName Serwer01— tworzy sesję do jednego serwera i zapisuje ją w zmiennej do późniejszego użycia.$sesje = New-PSSession -ComputerName Web01, Web02, Web03— zakłada trzy sesje naraz, po jednej na każdy host.$s = New-PSSession -ComputerName Serwer01 -Credential (Get-Credential)— łączy się jako wskazany użytkownik, pytając o hasło w okienku.Invoke-Command -Session $s -ScriptBlock { Get-Service WinRM }— uruchamia polecenie w istniejącej sesji bez ponownego nawiązywania połączenia.$s = New-PSSession -ComputerName Serwer01 -UseSSL -Port 5986— wymusza szyfrowane połączenie po HTTPS na porcie 5986.
Częste błędy i pułapki
Pierwsza pułapka: New-PSSession samo nic nie wykonuje. Tworzy tylko obiekt sesji — żeby coś zrobić, podajesz tę sesję do Invoke-Command -Session albo wchodzisz do niej przez Enter-PSSession -Session. Druga sprawa: jeśli WinRM po stronie celu nie jest skonfigurowany (Enable-PSRemoting), połączenie po prostu nie wstanie. Pamiętaj też, że sesje zajmują zasoby po obu stronach i nie znikają same — gdy skończysz, zamknij je przez Remove-PSSession, bo inaczej będą wisieć aż do timeoutu. Przy łączeniu poza domeną często gryzie uwierzytelnianie: musisz dodać host do TrustedHosts albo użyć -UseSSL. I uwaga na -Credential z kontem domenowym — podawaj je w formacie DOMENA\uzytkownik, inaczej Kerberos się obrazi.
Powiązane polecenia: Enter-PSSession, Invoke-Command, Get-PSSession, Remove-PSSession, New-PSSessionOption, Enable-PSRemoting.