about_PSSession_Details
Descrizione breve
Fornisce informazioni dettagliate sulle sessioni di PowerShell e sul ruolo che svolgono nei comandi remoti.
Descrizione lunga
Una sessione è un ambiente in cui viene eseguito PowerShell. Una sessione viene creata automaticamente ogni volta che si avvia PowerShell. È possibile creare sessioni aggiuntive, denominate "sessioni di PowerShell" o "PSSessions" nel computer o in un altro computer.
A differenza delle sessioni create automaticamente da PowerShell, è possibile controllare e gestire le sessioni PSSession create dall'utente.
Le sessioni PSSession svolgono un ruolo importante nel calcolo remoto. Quando si crea una sessione PSSession connessa a un computer remoto, PowerShell stabilisce una connessione permanente al computer remoto per supportare la sessione PSSession. È possibile usare la sessione PSSession per eseguire una serie di comandi, funzioni e script che condividono i dati.
In questo argomento vengono fornite informazioni dettagliate sulle sessioni e le sessioni PSSession in PowerShell. Per informazioni di base sulle attività che è possibile eseguire con le sessioni, vedere about_PSSessions.
Informazioni sulle sessioni
Tecnicamente, una sessione è un ambiente di esecuzione in cui viene eseguito PowerShell. Ogni sessione include un'istanza del motore System.Management.Automation e un programma host in cui viene eseguito PowerShell. L'host può essere la console di PowerShell familiare o un altro programma che esegue comandi, ad esempio Cmd.exe o un programma compilato per ospitare PowerShell, ad esempio Ambiente di scripting integrato di Windows PowerShell (I edizione Standard). Dal punto di vista di Windows, una sessione è un processo Windows nel computer di destinazione.
Ogni sessione viene configurata in modo indipendente. Include le proprie proprietà, i propri criteri di esecuzione e i propri profili. L'ambiente esistente quando la sessione viene creata viene mantenuta per tutta la durata anche se si modifica l'ambiente nel computer. Tutte le sessioni vengono create in un ambito globale, anche le sessioni create in uno script.
È possibile eseguire un solo comando (o una pipeline di comandi) in una sessione contemporaneamente. Un secondo comando viene eseguito in modo sincrono (uno alla volta) attende fino a quattro minuti per il completamento del primo comando. Un secondo comando viene eseguito in modo asincrono (simultaneamente).
Informazioni sulle sessioni PSSession
Viene creata una sessione ogni volta che si avvia PowerShell. PowerShell crea inoltre sessioni temporanee per eseguire singoli comandi. Tuttavia, è anche possibile creare sessioni (denominate "sessioni di PowerShell" o "PSSessions") che si controllano e gestiscono.
Le sessioni PSSession sono fondamentali per i comandi remoti. Se si usa il parametro ComputerName dei Invoke-Command
cmdlet o Enter-PSSession
, PowerShell stabilisce una sessione temporanea per eseguire il comando e quindi chiude la sessione non appena il comando o la sessione interattiva è completata.
Tuttavia, se si usa il New-PSSession
cmdlet per creare una sessione PSSession, PowerShell stabilisce una sessione persistente nel computer remoto in cui è possibile eseguire più comandi o sessioni interattive. Le sessioni PSSession create rimangono aperte e disponibili per l'uso fino a quando non vengono eliminate o fino a quando non si chiude la sessione in cui sono state create.
Quando si crea una sessione PSSession in un computer remoto, il sistema crea un processo di PowerShell nel computer remoto e stabilisce una connessione dal computer locale al processo nel computer remoto. Quando si crea una sessione PSSession nel computer locale, sia il nuovo processo che le connessioni vengono create nel computer locale.
Quando è necessaria una sessione PSSession?
I Invoke-Command
cmdlet e Enter-PSSession
hanno parametri ComputerName e Session . È possibile usare uno dei due comandi per eseguire un comando remoto.
Utilizzare il parametro ComputerName per eseguire un singolo comando o una serie di comandi non correlati in uno o più computer.
Per eseguire comandi che condividono dati, è necessaria una connessione permanente al computer remoto. In tal caso, creare una sessione PSSession e quindi usare il parametro Session per eseguire i comandi nella sessione PSSession.
Molti altri cmdlet che ottengono dati da computer remoti, ad esempio Get-Process
, Get-Service
, Get-EventLog
e Get-WmiObject
hanno solo un parametro ComputerName . Usano tecnologie diverse dalla comunicazione remota di PowerShell per raccogliere dati in remoto. Questi cmdlet non hanno un parametro Session , ma è possibile usare il Invoke-Command
cmdlet per eseguire questi comandi in una sessione PSSession.
Come si crea una sessione PSSession?
Per creare una sessione PSSession, usare il New-PSSession
cmdlet . È possibile usare New-PSSession
per creare una sessione PSSession in un computer locale o remoto.
È possibile creare una sessione PSSession in qualsiasi computer?
Per creare una sessione PSSession connessa a un computer remoto, è necessario configurare il computer per la comunicazione remota in PowerShell. L'utente corrente deve essere membro del gruppo Amministrazione istrators nel computer remoto oppure l'utente corrente deve essere in grado di fornire le credenziali di un membro del gruppo Amministrazione istrators. Per altre informazioni, vedere about_Remote_Requirements.
È possibile visualizzare le sessioni PSSession in altre sessioni?
A partire da Windows PowerShell 3.0, il parametro ComputerName del Get-PSSession
cmdlet ottiene le sessioni PSSession create nei computer remoti specificati.
Le sessioni PSSession attive vengono mantenute nel computer remoto (il "lato server" di una connessione) ed è possibile ottenerle da qualsiasi sessione in qualsiasi computer.
Ad esempio, se si crea una sessione PSSession dal computer Server01 al computer Server02 e quindi si passa al computer Server03, è possibile usare un comando simile al seguente per ottenere la sessione.
Get-PSSession -ComputerName Server02
Anche se si disconnette dalla sessione, la sessione viene mantenuta nel computer remoto fino a quando non viene eliminata o si verifica il timeout.
In Windows PowerShell 2.0 è possibile ottenere solo le sessioni PSSession create nella sessione corrente. Non è possibile ottenere le sessioni PSSession create in altre sessioni.
Per altre informazioni, vedere Get-PSSession.
È possibile visualizzare le sessioni PSSession create da altri utenti nel computer?
È possibile ottenere e gestire solo le sessioni PSSession create da altri utenti solo se è possibile specificare le credenziali dell'utente che ha creato la sessione PSSession o la configurazione di sessione usata da PSSession include le credenziali RunAs. In caso contrario, è possibile ottenere, connettersi, usare e gestire solo le sessioni PSSession create.
È possibile Connessione a una sessione PSSession da un computer diverso?
A partire da Windows PowerShell 3.0, le sessioni PSSession nei computer Windows sono indipendenti dalle sessioni in cui sono state create. Le sessioni PSSession attive vengono mantenute nel computer in corrispondenza del lato remoto o "server" di una connessione.
In un computer Windows è possibile usare il Disconnect-PSSession
cmdlet per disconnettersi da una sessione PSSession. La sessione PSSession viene disconnessa dalla sessione locale, ma viene mantenuta nel computer remoto.
I comandi continuano a essere eseguiti nella sessione PSSession disconnessa. È possibile chiudere PowerShell e arrestare il computer di origine senza interrompere la sessione PSSession.
Quindi, anche in un secondo momento, è possibile usare il Get-PSSession
cmdlet per ottenere la sessione PSSession e il Connect-PSSession
cmdlet per connettersi alla sessione PSSession da una nuova sessione in un computer Windows diverso.
Per altre informazioni, vedere about_Remote_Disconnected_Sessions.
Cosa succede alla sessione PSSession se il computer si arresta?
Le sessioni PSSession disconnesse sono indipendenti dalle sessioni in cui sono state create. Se si disconnette una sessione PSSession e quindi si chiude il computer di origine, la sessione PSSession viene mantenuta nel computer remoto.
PowerShell tenta inoltre di ripristinare le sessioni PSSession attive disconnesse involontariamente, ad esempio da un riavvio del computer, da un'interruzione temporanea dell'alimentazione o da un'interruzione di rete. PowerShell tenta di mantenere o ripristinare la sessione PSSession a uno stato Aperto, se la sessione di origine è ancora disponibile o a uno stato disconnesso se non lo è.
Una sessione PSSession "attiva" è una sessione PSSession che esegue comandi. Se una sessione PSSession è connessa (non disconnessa) e i comandi vengono eseguiti nella sessione PSSession quando la sessione connessa si chiude, PowerShell tenta di mantenere la sessione PSSession nel computer remoto. Tuttavia, se non vengono eseguiti comandi nella sessione PSSession, PowerShell chiude la sessione PSSession alla chiusura della sessione connessa.
Per altre informazioni, vedere about_Remote_Disconnected_Sessions.
È possibile eseguire un processo in background in una sessione PSSession?
Sì. Un processo in background è un comando che viene eseguito in modo asincrono in background senza interagire con la sessione corrente. Quando si invia un comando per avviare un processo, il comando restituisce un oggetto processo, ma il processo continua a essere eseguito in background finché non viene completato.
Per avviare un processo in background in un computer locale, usare il Start-Job
comando .
È possibile eseguire il processo in background in una connessione temporanea (usando il parametro ComputerName ) o in una sessione PSSession (usando il parametro Session ).
Per avviare un processo in background in un computer remoto, usare il cmdlet con il Invoke-Command
relativo parametro AsJob oppure usare il Invoke-Command
cmdlet per eseguire un Start-Job
comando in un computer remoto. Quando si usa il parametro AsJob , è possibile usare i parametri ComputerName o Session .
Quando si usa Invoke-Command
per eseguire un Start-Job
comando, è necessario eseguire il comando in una sessione PSSession. Se si usa il parametro ComputerName , PowerShell termina la connessione quando viene restituito l'oggetto processo e il processo viene interrotto.
Per altre informazioni, vedere About Jobs (Informazioni sui processi).
È possibile eseguire una sessione interattiva?
Sì. Per avviare una sessione interattiva con un computer remoto, usare il Enter-PSSession
cmdlet . In una sessione interattiva, i comandi digitati vengono eseguiti nel computer remoto, come se fossero stati digitati direttamente nel computer remoto.
È possibile eseguire una sessione interattiva in una sessione temporanea (usando il parametro ComputerName ) o in una sessione PSSession (usando il parametro Session ). Se si usa una sessione PSSession, la sessione PSSession mantiene i dati dei comandi precedenti e pssession mantiene tutti i dati generati durante la sessione interattiva per l'uso nei comandi successivi.
Quando si termina la sessione interattiva, la sessione PSSession rimane aperta e disponibile per l'uso.
Per altre informazioni, vedere Enter-PSSession e Exit-PSSession.
È necessario eliminare le sessioni PSSession?
Sì. Una sessione PSSession è un processo, che è un ambiente autonomo che usa memoria e altre risorse anche quando non lo si usa. Al termine di una sessione PSSession, eliminarla. Se si creano più sessioni PSSession, chiudere quelle che non si usano e mantenere solo quelle attualmente in uso.
Per eliminare le sessioni PSSession, usare il Remove-PSSession
cmdlet . Elimina le sessioni PSSession e rilascia tutte le risorse usate.
È anche possibile usare il parametro IdleTimeOut di New-PSSessionOption
per chiudere una sessione PSSession inattiva dopo un intervallo specificato. Per altre informazioni, vedere New-PSSessionOption.
Se si salva un oggetto PSSession in una variabile e quindi si elimina la sessione PSSession o si lascia scadere, la variabile contiene ancora l'oggetto PSSession, ma la sessione PSSession non è attiva e non può essere usata o riparata.
Tutte le sessioni e le sessioni PSSession sono uguali?
No. Gli sviluppatori possono creare sessioni personalizzate che includono solo provider e cmdlet selezionati. Se un comando funziona in una sessione ma non in un'altra, è possibile che la sessione sia limitata.