Condividi tramite


about_PSSessions

Descrizione breve

Descrive le sessioni di PowerShell (PSSession) e spiega come stabilire una connessione permanente a un computer remoto.

Descrizione lunga

Per eseguire comandi di PowerShell in un computer remoto, è possibile usare il parametro ComputerName di un cmdlet oppure creare una sessione di PowerShell (PSSession) ed eseguire i comandi nella sessione PSSession.

Quando si crea una sessione PSSession, PowerShell stabilisce una connessione permanente al computer remoto. Usare una sessione PSSession per eseguire una serie di comandi correlati in un computer remoto. I comandi eseguiti nella stessa sessione PSSession possono condividere dati, ad esempio i valori di variabili, alias e funzioni.

È anche possibile creare una sessione PSSession nel computer locale ed eseguirvi comandi. Una sessione PSSession locale usa l'infrastruttura remota di PowerShell per creare e gestire la sessione PSSession.

A partire da Windows PowerShell 3.0, le sessioni PSSession in Windows sono indipendenti dalle sessioni in cui vengono create. Le sessioni PSSession attive vengono mantenute nel computer remoto (o nel computer alla fine remota o sul lato server della connessione). Di conseguenza, in Windows è possibile disconnettersi da una sessione PSSession in un computer Windows remoto e riconnettersi a esso in un secondo momento dallo stesso computer o da un altro computer Windows.

In questo argomento viene illustrato come creare, usare, ottenere ed eliminare le sessioni PSSession. Per informazioni più avanzate, vedere about_PSSession_Details.

Nota: le sessioni PSSession usano l'infrastruttura remota di PowerShell. Per usare le sessioni PSSession, i computer locali e remoti devono essere configurati per la comunicazione remota. Per altre informazioni, vedere about_Remote_Requirements.

In Windows Vista e versioni successive di Windows, per creare una sessione PSSession in un computer locale, è necessario avviare PowerShell con l'opzione "Esegui come amministratore".

Che cos'è una sessione?

Una sessione è un ambiente in cui viene eseguito PowerShell.

Ogni volta che si avvia PowerShell, viene creata automaticamente una sessione ed è possibile eseguire i comandi nella sessione. È anche possibile aggiungere elementi alla sessione, ad esempio moduli e snap-in, ed è possibile creare elementi, ad esempio variabili, funzioni e alias. Questi elementi esistono solo nella sessione e vengono eliminati al termine della sessione.

È anche possibile creare sessioni gestite dall'utente, note come "sessioni di PowerShell" o "PSSessions", nel computer locale o in un computer remoto. Analogamente alla sessione predefinita, è possibile eseguire comandi in una sessione PSSession e aggiungere e creare elementi. Tuttavia, a differenza della sessione che viene avviata automaticamente, è possibile controllare le sessioni PSSession create. È possibile ottenere, creare, configurare e rimuoverli, disconnetterli e riconnettersi a essi ed eseguire più comandi nella stessa sessione PSSession. La sessione PSSession rimane disponibile fino a quando non viene eliminata o si verifica il timeout.

In genere, si crea una sessione PSSession per eseguire una serie di comandi correlati in un computer remoto. Quando si crea una sessione PSSession in un computer remoto, PowerShell stabilisce una connessione permanente al computer remoto per supportare la sessione.

Se si usa il parametro ComputerName del Invoke-Command cmdlet o Enter-PSSession per eseguire un comando remoto o per avviare una sessione interattiva, PowerShell crea una sessione temporanea nel computer remoto e chiude la sessione non appena il comando viene completato o non appena termina la sessione interattiva. Non è possibile controllare queste sessioni temporanee e non è possibile usarle per più di un singolo comando o di una singola sessione interattiva.

In PowerShell, la "sessione corrente" è la sessione in cui si sta lavorando. La "sessione corrente" può fare riferimento a qualsiasi sessione, inclusa una sessione temporanea o una sessione PSSession.

Perché usare una sessione PSSession?

Usare una sessione PSSession quando è necessaria una connessione permanente a un computer remoto. Con una sessione PSSession è possibile eseguire una serie di comandi che condividono dati, ad esempio il valore delle variabili, il contenuto di una funzione o la definizione di un alias.

È possibile eseguire comandi remoti senza creare una sessione PSSession. Usare il parametro ComputerName dei cmdlet abilitati per la modalità remota per eseguire un singolo comando o una serie di comandi non correlati in uno o più computer.

Quando si usa il parametro ComputerName di Invoke-Command o Enter-PSSession, PowerShell stabilisce una connessione temporanea al computer remoto e quindi chiude la connessione non appena il comando viene completato. Tutti gli elementi dati creati vengono persi quando la connessione viene chiusa.

Altri cmdlet con un parametro ComputerName , ad esempio Get-Eventlog e Get-WmiObject, usano tecnologie di comunicazione remota diverse per raccogliere dati. Nessuno crea una connessione persistente come una sessione PSSession.

Come creare una sessione PSSession

Per creare una sessione PSSession, usare il New-PSSession cmdlet . Per creare la sessione PSSession in un computer remoto, usare il parametro ComputerName del New-PSSession cmdlet .

Ad esempio, il comando seguente crea una nuova sessione PSSession nel computer Server01.

New-PSSession -ComputerName Server01

Quando si invia il comando, New-PSSession crea la sessione PSSession e restituisce un oggetto che rappresenta la sessione PSSession. È possibile salvare l'oggetto in una variabile quando si crea la sessione PSSession oppure è possibile usare un Get-PSSession comando per ottenere la sessione PSSession in un secondo momento.

Ad esempio, il comando seguente crea una nuova sessione PSSession nel computer Server01 e salva l'oggetto risultante nella variabile $ps.

$ps = New-PSSession -ComputerName Server01

Come creare sessioni PSSession in più computer

Per creare sessioni PSSession in più computer, usare il parametro ComputerName del New-PSSession cmdlet . Digitare i nomi dei computer remoti in un elenco delimitato da virgole.

Ad esempio, per creare sessioni PSSession nei computer Server01, Server02 e Server03, digitare:

New-PSSession -ComputerName Server01, Server02, Server03

New-PSSession crea una sessione PSSession in ognuno dei computer remoti.

Come ottenere le sessioni PSSession

Per ottenere le sessioni PSSession create nella sessione corrente, usare il Get-PSSession cmdlet senza il parametro ComputerName . Get-PSSession restituisce lo stesso tipo di oggetto restituito New-PSSession .

Il comando seguente ottiene tutte le sessioni PSSession create nella sessione corrente.

Get-PSSession

La visualizzazione predefinita delle sessioni PSSession mostra l'ID e un nome visualizzato predefinito. È possibile assegnare un nome visualizzato alternativo quando si crea la sessione.

Id   Name       ComputerName    State    ConfigurationName
---  ----       ------------    -----    ---------------------
1    Session1   Server01        Opened   Microsoft.PowerShell
2    Session2   Server02        Opened   Microsoft.PowerShell
3    Session3   Server03        Opened   Microsoft.PowerShell

È anche possibile salvare le sessioni PSSession in una variabile. Il comando seguente ottiene le sessioni PSSession e le salva nella variabile $ps 123.

$ps123 = Get-PSSession

Quando si usano i cmdlet PSSession, è possibile fare riferimento a una sessione PSSession in base al relativo ID, al nome o al relativo ID istanza (GUID). Il comando seguente ottiene una sessione PSSession in base al relativo ID e la salva nella variabile $ps 01.

$ps01 = Get-PSSession -Id 1

A partire da Windows PowerShell 3.0, le sessioni PSSession vengono mantenute nel computer remoto. Per ottenere le sessioni PSSession create in computer remoti specifici, usare il parametro ComputerName del Get-PSSession cmdlet . Il comando seguente ottiene le sessioni PSSession create nel computer remoto Server01. Sono incluse le sessioni PSSession create nella sessione corrente e in altre sessioni nel computer locale o in altri computer.

Get-PSSession -ComputerName Server01

In Windows PowerShell 2.0 Get-PSSession ottiene solo le sessioni PSSession create nella sessione corrente. Non ottiene le sessioni PSSession create in altre sessioni o in altri computer, anche se le sessioni sono connesse a e e eseguono comandi nel computer locale.

Come eseguire comandi in una sessione PSSession

Per eseguire un comando in una o più sessioni PSSession, usare il Invoke-Command cmdlet . Usare il parametro Session per specificare pssessioni e il parametro ScriptBlock per specificare il comando.

Ad esempio, per eseguire un Get-ChildItem comando ("dir") in ognuna delle tre sessioni PSSession salvate nella variabile $ps 123, digitare:

Invoke-Command -Session $ps123 -ScriptBlock { Get-ChildItem }

Come eliminare le sessioni PSSession

Al termine della sessione PSSession, usare il Remove-PSSession cmdlet per eliminare la sessione PSSession e rilasciare le risorse in uso.

Remove-PSSession -Session $ps

or

Remove-PSSession -Id 1

Per rimuovere una sessione PSSession da un computer remoto, usare il parametro ComputerName del Remove-PSSession cmdlet .

Remove-PSSession -ComputerName Server01 -Id 1

Se non si elimina la sessione PSSession, la sessione PSSession rimane disponibile per l'uso fino al timeout.

È anche possibile usare il parametro IdleTimeout del New-PSSessionOption cmdlet per impostare un'ora di scadenza per una SESSIONE PSSession inattiva. Per altre informazioni, vedere New-PSSessionOption.

Cmdlet PSSession

Per un elenco di cmdlet PSSession, digitare:

Get-Help *-PSSession
  • Connect-PSSession: connette una sessione PSSession alla sessione corrente
  • Disconnect-PSSession: disconnette una sessione PSSession dalla sessione corrente
  • Enter-PSSession: avvia una sessione interattiva
  • Exit-PSSession: termina una sessione interattiva
  • Get-PSSession: ottiene le sessioni PSSession nella sessione corrente
  • New-PSSession: crea una nuova sessione PSSession in un computer locale o remoto
  • Receive-PSSession: ottiene i risultati dei comandi eseguiti in una sessione disconnessa
  • Remove-PSSession: elimina le sessioni PSSession nella sessione corrente

Nota

Le sessioni disconnesse sono supportate solo in Windows. I Connect-PSSessioncmdlet , Disconnect-PSSessione Receive-PSSession sono disponibili solo in Windows. Per altre informazioni sulle sessioni disconnesse, vedere about_Remote_Disconnected_Session

Per Ulteriori Informazioni

Per altre informazioni sulle sessioni PSSession, vedere about_PSSession_Details.

Vedi anche