ARGOMENTO about_PSSession_Details DESCRIZIONE BREVE Fornisce informazioni dettagliate sulle sessioni di Windows PowerShell e sul ruolo che interpretano nei comandi remoti. DESCRIZIONE DETTAGLIATA Una sessione è un ambiente in cui viene eseguito Windows PowerShell. Viene automaticamente creata una sessione ogni volta che si avvia Windows PowerShell. È inoltre possibile creare sessioni aggiuntive, denominate "sessioni di Windows PowerShell" o "PSSession" nel computer in uso o in un altro computer. A differenza delle sessioni create automaticamente in Windows PowerShell, le sessioni PSSession che si creano possono essere controllate e gestite. Le sessioni PSSession svolgono un ruolo importante nell'elaborazio ne remota. Quando si crea una sessione PSSession connessa a un computer remoto, Windows PowerShell stabilisce una connessione permanente con il computer remoto per supportare tale sessione. È possibile utilizzare la sessione PSSession per eseguire una serie di comandi, funzioni e script che condividono i dati. In questo argomento vengono fornite informazioni dettagliate su sessioni e PSSession in Windows 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 Windows PowerShell. Ogni sessione include un'istanza del motore System.Management.Automation e un programma host in cui viene eseguito Windows PowerShell. L'host può essere la console di Windows PowerShell abituale o un altro programma che esegue comandi, ad esempio Cmd.exe o un programma compilato per ospitare Windows PowerShell, ad esempio Windows PowerShell Integrated Scripting Environment (ISE). Per quanto riguarda Windows, una sessione è un processo di Windows sul computer di destinazione. Ogni sessione è configurata indipendentemente. Include proprietà, criteri di esecuzione e profili propri. L'ambiente presente al momento della creazione della sessione viene mantenuto per tutta la sua durata, anche se si modifica l'ambiente nel computer. Tutte le sessioni vengono create in un ambito globale, anche le sessioni che si creano in uno script. In una sessione è possibile eseguire un solo comando (o pipeline di comandi) alla volta. Un secondo comando eseguito in modo sincrono (uno alla volta) attende fino a quattro minuti il completamento del primo comando. Un secondo comando eseguito in modo asincrono (contemporaneamente) non riesce. INFORMAZIONI SULLE SESSIONI PSSESSION Ogni volta che si avvia Windows PowerShell viene creata una sessione. Inoltre, in Windows PowerShell vengono create automaticamente sessioni temporanee per l'esecuzione di comandi singoli. Tuttavia, è anche possibile creare sessioni (denominate "sessioni di Windows PowerShell" o "PSSession") che è possibile controllare e gestire. Le sessioni PSSession sono essenziali per i comandi remoti. Se si utilizza il parametro ComputerName dei cmdlet Invoke-Command o Enter-PSSession, in Windows PowerShell viene stabilita una sessione temporanea per eseguire il comando, quindi viene chiusa la sessione al completamento del comando o della sessione interattiva. Tuttavia, se si utilizza il cmdlet New-PSSession per creare una sessione PSSession, in Windows PowerShell viene stabilita una sessione permanente nel computer remoto in cui è possibile eseguire più comandi o sessioni interattive. Le sessioni PSSession create restano aperte e disponibili per l'uso finché non vengono eliminate o finché non si chiude la sessione in cui sono state create. Quando si crea una sessione PSSession in un computer remoto, viene creato un processo di PowerShell nel computer remoto e viene stabilita una connessione dal computer locale al processo sul 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 cmdlet Invoke-Command e Enter-PSSession presentano entrambi i parametri ComputerName e Session. È possibile utilizzarli alternativamente per eseguire un comando remoto. Utilizzare il parametro ComputerName per eseguire un comando singolo o una serie di comandi non correlati su uno o più computer. Per eseguire comandi che condividono dati, è necessaria una connessione permanente al computer remoto. In questo caso, creare una sessione PSSession, quindi utilizzare il parametro Session per eseguire comandi nella sessione PSSession. Molti altri cmdlet che ottengono dati dai computer remoti, quali Get-Process, Get-Service, Get-EventLog e Get-WmiObject dispongono di solo un parametro ComputerName. Utilizzano tecnologie diverse dalla comunicazione remota di Windows PowerShell per raccogliere dati in modalità remota. Questi cmdlet non dispongono di un parametro Session ma è possibile utilizzare il cmdlet Invoke-Command per eseguire questi comandi in una sessione PSSession. COME SI CREA UNA SESSIONE PSSESSION? Per creare una sessione PSSession, utilizzare il cmdlet New-PSSession. È possibile utilizzare New-PSSession per creare una sessione PSSession in un computer locale o remoto. POSSO CREARE UNA SESSIONE PSSESSION IN QUALSIASI COMPUTER? Per creare una sessione PSSession connessa a un computer remoto, il computer deve essere configurato per la comunicazione remota in Windows PowerShell. L'utente corrente deve essere membro del gruppo Administrators nel computer remoto o deve essere in grado di fornire le credenziali di un membro del gruppo Administrators. Per ulteriori informazioni, vedere about_Remote_Requirements. È POSSIBILE VISUALIZZARE SESSIONI PSSESSION CREATE DA ALTRI UTENTI SUL COMPUTER LOCALE? No. È possibile ottenere e gestire solo le sessioni PSSession che si creano nella sessione corrente. Non è possibile visualizzare sessioni PSSession create da altri utenti, anche se hanno eseguito comandi sul computer locale. È 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 e non interagisce con la sessione corrente. Quando si invia un comando per avviare un processo, viene restituito un oggetto processo ma il processo continua a essere in esecuzione in background finché non viene completato. Per avviare un processo in background in un computer locale, utilizzare il comando Start-Job. È possibile eseguire il processo in background in una connessione temporanea (tramite il parametro ComputerName) o in una sessione PSSession (tramite il parametro Session). Per avviare un processo in background in un computer remoto, utilizzare il cmdlet Invoke-Command con il parametro AsJob oppure utilizzare il cmdlet Invoke-Command per eseguire un comando Start-Job in un computer remoto. Quando si utilizza il parametro AsJob, è possibile utilizzare i parametri ComputerName o Session. Quando si utilizza Invoke-Command per eseguire un comando Start-Job, è possibile eseguire il comando in una sessione PSSession. Se si utilizza il parametro ComputerName, in Windows PowerShell viene terminata la connessione quando viene restituito l'oggetto processo e il processo viene interrotto. Per ulteriori informazioni, vedere about_Jobs. È POSSIBILE ESEGUIRE UNA SESSIONE INTERATTIVA? Sì. Per avviare una sessione interattiva con un computer remoto, utilizzare il cmdlet Enter-PSSession. In una sessione interattiva, i comandi digitati vengono eseguiti nel computer remoto, come se venissero digitati direttamente nel computer remoto. È possibile eseguire una sessione interattiva in una sessione temporanea (tramite il parametro ComputerName) o in una sessione PSSession (tramite il parametro Session). Se si utilizza una sessione PSSession, nella sessione PSSession vengono mantenuti i dati dei comandi precedenti ed eventuali dati generati durante la sessione interattiva per l'utilizzo nei comandi successivi. Quando si termina la sessione interattiva, la sessione PSSession rimane aperta e disponibile per l'uso. Per ulteriori informazioni, vedere Enter-PSSession e Exit-PSSession. È NECESSARIO ELIMINARE LE SESSIONI PSSESSION? Sì. Una sessione PSSession è un processo ovvero un ambiente autosufficiente che utilizza memoria e altre risorse anche quando non lo si utilizza. Al termine dell'utilizzo di una sessione PSSession, eliminarla. Se si creano più sessioni PSSession, chiudere quelle inutilizzate e mantenere solo quelle attualmente in uso. Per eliminare sessioni PSSession, utilizzare il cmdlet Remove-PSSession. Elimina le sessioni PSSession e rilascia tutte le risorse da esse utilizzate. È anche possibile utilizzare il parametro TimeOut di New-PSSession per chiudere una sessione PSSession inattiva dopo un intervallo specificato. Per ulteriori informazioni, vedere New-PSSession. Se non si elimina la sessione PSSession o non imposta un timeout, la sessione PSSession resterà aperta e disponibile per l'uso finché non la si chiude, finché non si chiude la sessione in cui è stata creata o finché non si esce da Windows PowerShell. Tuttavia, una sessione PSSession in un computer remoto verrà disconnessa se il computer remoto non risponde per quattro minuti (il computer remoto è configurato per inviare un impulso heartbeat ogni tre minuti). Se si salva uno oggetto PSSession in una variabile e quindi si elimina la sessione PSSession o si consente che il timeout scada, la variabile continua a contenere l'oggetto PSSession ma la sessione PSSession non è più attiva e non può essere utilizzata o ripristinata. SESSIONI E 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, potrebbe essere dovuto al fatto che la sessione è limitata. VEDERE ANCHE about_Jobs about_PSSessions about_Remote about_Remote_Requirements Invoke-Command New-PSSession Get-PSSession Remove-PSSession Enter-PSSession Exit-PSSession