New-PSSession

Tworzy trwałą sesję zdalną do wielokrotnego użytku.

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] [-Credential ]

  • -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. z Get-Credential).
  • -Name — nadaje sesji przyjazną nazwę, żebyś łatwiej ją odnalazł na liście.
  • -Portport 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, CredSSP i inne).
  • -ConfigurationName — punkt końcowy sesji; domyślnie Microsoft.PowerShell.
  • -SessionOption — dodatkowe ustawienia z New-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.