Enter-PSSession în PowerShell

Module, pachete și remoting Windows PowerShell 2.0

Deschide o sesiune interactivă pe un alt computer (prin WinRM sau, din PowerShell 6.0, prin SSH); ieși cu Exit-PSSession sau exit.

Sintaxă
Enter-PSSession [-ComputerName] <String> [-Credential <PSCredential>] [-ConfigurationName <String>]
Enter-PSSession [-HostName] <String> [-UserName <String>] [-KeyFilePath <String>]
Exit-PSSession

Ce face Enter-PSSession

Enter-PSSession te conectează interactiv la un singur computer: comenzile pe care le scrii rulează acolo, ca și cum ai sta la tastatura lui. Promptul se schimbă și arată numele computerului, de exemplu [SRV-IASI01]: PS C:\Users\ana\Documents>. Sesiunea se închide cu Exit-PSSession sau exit. Poți avea o singură sesiune interactivă odată; pentru comenzi pe mai multe computere folosești Invoke-Command.

Pe Windows, conexiunea cu -ComputerName folosește WinRM (porturile 5985 pentru HTTP și 5986 pentru HTTPS). Computerul țintă trebuie să aibă remoting activat: rulezi o dată Enable-PSRemoting într-o sesiune de administrator (pe Windows Server 2012 și mai nou e activat implicit). Contul tău trebuie să fie în grupul Administrators sau Remote Management Users de pe țintă. Fără -ConfigurationName ajungi pe endpoint-ul implicit Microsoft.PowerShell, adică Windows PowerShell; Enable-PSRemoting rulat în PowerShell 7 creează un endpoint pentru acea versiune, pe care îl alegi cu -ConfigurationName (vezi numele cu Get-PSSessionConfiguration pe țintă).

Din PowerShell 6.0, parametrul -HostName (cu -UserName, -KeyFilePath, -Port) deschide sesiunea prin SSH și merge între Windows, Linux și macOS; ținta trebuie să aibă configurat un subsistem PowerShell în sshd. Remoting-ul prin WinRM nu este suportat pe Linux și macOS. Enter-PSSession este gândit pentru lucru interactiv, nu pentru scripturi sau funcții. Alias: etsn.

Parametri

Parametru Descriere
-ComputerName Numele (NetBIOS, FQDN) sau adresa IP a computerului; conexiune prin WinRM. Pentru o adresă IP ai nevoie de -Credential și de HTTPS sau de lista TrustedHosts.
-Credential Contul cu care te conectezi, de exemplu EXEMPLU\ana; parola se cere la conectare.
-Session O sesiune existentă, creată cu New-PSSession; după exit rămâne deschisă.
-ConfigurationName Endpoint-ul de pe țintă (implicit Microsoft.PowerShell); la SSH, subsistemul.
-UseSSL / -Port Conexiune HTTPS, respectiv alt port decât cel implicit.
-HostName Computerul pentru SSH, opțional sub forma utilizator@gazda:port. Din PowerShell 6.0.
-UserName Utilizatorul SSH (implicit, cel conectat local). Din PowerShell 6.0.
-KeyFilePath Cheia privată SSH pentru autentificare fără parolă. Din PowerShell 6.0.
-SSHTransport Forțează conexiunea prin SSH. Din PowerShell 6.0.

Ce returnează

Nimic; schimbă sesiunea interactivă curentă cu cea de pe computerul țintă.

Exemple

Exemplul 1: Sesiune interactivă pe un server Windows

Fiecare comandă rulează pe SRV-IASI01; promptul arată numele serverului până la exit.

Enter-PSSession -ComputerName SRV-IASI01
hostname
Get-Service -Name Spooler
exit

Ieșire în terminal

[SRV-IASI01]: PS C:\Users\ana\Documents> hostname
SRV-IASI01
[SRV-IASI01]: PS C:\Users\ana\Documents> Get-Service -Name Spooler

Status   Name               DisplayName
------   ----               -----------
Running  Spooler            Print Spooler

[SRV-IASI01]: PS C:\Users\ana\Documents> exit

Exemplul 2: Sesiune prin SSH pe un server Linux

Utilizatorul este dat în -HostName; dacă serverul acceptă parole, ssh o cere, altfel se folosește cheia SSH.

Enter-PSSession -HostName ana@srv-cluj.exemplu.ro
$PSVersionTable.PSVersion.ToString()
Exit-PSSession

Ieșire în terminal

ana@srv-cluj.exemplu.ro's password:
[srv-cluj.exemplu.ro]: PS /home/ana> $PSVersionTable.PSVersion.ToString()
7.5.4
[srv-cluj.exemplu.ro]: PS /home/ana> Exit-PSSession

Greșeli frecvente

  • Pui Enter-PSSession într-un script și aștepți ca liniile următoare să ruleze pe server: ele rulează local; în scripturi folosește Invoke-Command.
  • Te conectezi la o adresă IP și primești eroare de autentificare: cu WinRM, IP-ul cere -Credential și HTTPS sau adăugarea în TrustedHosts.
  • Te miri că în sesiune ai Windows PowerShell 5.1, nu PowerShell 7: endpoint-ul implicit este Microsoft.PowerShell; alege endpoint-ul PowerShell 7 cu -ConfigurationName.
  • Aștepți ca funcțiile din profilul tău local să existe în sesiune: se încarcă profilul de pe computerul țintă, nu cel local.

Comenzi înrudite

  • Invoke-Command: Rulează comenzi sau scripturi pe unul sau mai multe computere deodată și aduce înapoi rezultatele, inclusiv erorile.
  • Get-Service: Listează serviciile Windows, pornite și oprite, cu starea, numele scurt și numele afișat; există doar pe Windows.
  • PowerShell pe macOS și Linux: Cum instalezi și pornești PowerShell 7 (pwsh) pe macOS și Linux și ce se comportă diferit față de Windows: aliasuri, majuscule, căi.