Creare e gestire sessioni PSSession permanenti usando Windows PowerShell

Completato

Usare il comando New-PSSession per creare una connessione permanente. Il comando contiene molti parametri analoghi a quelli di Invoke-Command, tra cui -Credential, –Port e –UseSSL. Ciò è dovuto al fatto che si sta creando una connessione identica a quella creata da Invoke-Command. Tuttavia, invece di chiudere immediatamente la connessione, la si lascia in esecuzione.

Le sessioni di PowerShell hanno un timeout di inattività, dopo il quale il computer remoto le chiude automaticamente. Una sessione di PowerShell chiusa è diversa da una sessione di PowerShell disconnessa, in quanto le sessioni chiuse non possono essere riconnesse. In questo caso, è possibile solo rimuovere la sessione di PowerShell e quindi ricrearla.

New-PSSession può accettare più nomi di computer, in modo da creare più oggetti sessione di PowerShell. Quando si esegue il comando New-PSSession, vengono restituiti gli oggetti che rappresentano le nuove sessioni di PowerShell create. È possibile assegnare queste sessioni di PowerShell a una variabile per potervi fare riferimento e poterle usare in futuro con più facilità.

È possibile usare una sessione di PowerShell non appena viene creata. Entrambi i comandi Invoke-Command e Enter-PSSession possono accettare un oggetto sessione di PowerShell al posto di un nome computer. Invoke-Command può accettare più oggetti sessione di PowerShell. A questo scopo, usare il parametro –Session dei comandi. Quando si usa questo parametro, i comandi usano la sessione di PowerShell esistente invece di creare una nuova connessione. Al termine dell'esecuzione del comando o all'uscita dalla sessione di PowerShell, la sessione rimane in esecuzione e connessa, pronta per l'uso futuro.

È ad esempio possibile usare i comandi seguenti per avviare una sessione di PowerShell in LON-CL1 e quindi chiuderla:

$client = New-PSSession –ComputerName LON-CL1
Enter-PSSession –Session $client
Exit-PSSession

In alternativa, è possibile usare i comandi seguenti per ottenere gli stessi risultati:

$computers = New-PSSession –ComputerName LON-CL1,LON-DC1
Invoke-Command –Session $computers –ScriptBlock { Get-Process }

Il comando seguente, ad esempio, può usare la variabile $dc per aprire una sessione di PowerShell in LON-DC1 all'interno di uno script o di un blocco di codice:

$dc = New-PSSession –ComputerName LON-DC1

Il comando seguente crea sessioni remote in Server01 e Server02 e gli oggetti sessione vengono archiviati nella variabile $s:

$s = New-PSSession -ComputerName Server01, Server02

Una volta stabilite le sessioni, è possibile eseguire qualsiasi comando al loro interno. Poiché le sessioni sono permanenti, è possibile raccogliere dati da un comando e usarli in un altro comando.

Il comando seguente, ad esempio, esegue un comando Get-HotFix nelle sessioni nella variabile $s e salva i risultati nella variabile $h:

Invoke-Command -Session $s {$h = Get-HotFix}

La variabile $h viene creata in ognuna delle sessioni in $s, ma non esiste nella sessione locale. È ora possibile usare i dati nella variabile $h con altri comandi nella stessa sessione e i risultati vengono visualizzati nel computer locale. Ad esempio:

Invoke-Command -Session $s {$h | where {$_.InstalledBy -ne "NTAUTHORITY\SYSTEM"}}