Disconnect-PSSession
Esegue la disconnessione da una sessione.
Sintassi
Disconnect-PSSession
[-Session] <PSSession[]>
[-IdleTimeoutSec <Int32>]
[-OutputBufferingMode <OutputBufferingMode>]
[-ThrottleLimit <Int32>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Disconnect-PSSession
[-IdleTimeoutSec <Int32>]
[-OutputBufferingMode <OutputBufferingMode>]
[-ThrottleLimit <Int32>]
-Name <String[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Disconnect-PSSession
[-IdleTimeoutSec <Int32>]
[-OutputBufferingMode <OutputBufferingMode>]
[-ThrottleLimit <Int32>]
-InstanceId <Guid[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Disconnect-PSSession
[-IdleTimeoutSec <Int32>]
[-OutputBufferingMode <OutputBufferingMode>]
[-ThrottleLimit <Int32>]
[-Id] <Int32[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Descrizione
Il Disconnect-PSSession
cmdlet disconnette una sessione di PowerShell (PSSession), ad esempio una sessione avviata usando il New-PSSession
cmdlet , dalla sessione corrente. Di conseguenza, la sessione PSSession è in uno stato disconnesso. È possibile connettersi alla sessione PSSession disconnessa dalla sessione corrente o da un'altra sessione nel computer locale o in un altro computer.
Il Disconnect-PSSession
cmdlet disconnette solo le sessioni PSSession aperte connesse alla sessione corrente. Disconnect-PSSession
non è possibile disconnettere le sessioni PSSession interrotte o chiuse o le sessioni PSSession interattive avviate tramite il Enter-PSSession
cmdlet e non è possibile disconnettere le sessioni PSSession connesse ad altre sessioni.
Per riconnettersi a una sessione PSSession disconnessa, usare i Connect-PSSession
cmdlet o Receive-PSSession
.
Quando una sessione PSSession è disconnessa, i comandi nella sessione PSSession continuano a essere eseguiti fino al completamento, a meno che la sessione PSSession non si esaurisca o i comandi nella sessione PSSession vengano bloccati da un buffer di output completo. Per modificare il timeout di inattività, usare il parametro IdleTimeoutSec . Per modificare la modalità di buffering di output, usare il parametro OutputBufferingMode È anche possibile usare il parametro InDisconnectedSession del Invoke-Command
cmdlet per eseguire un comando in una sessione disconnessa.
Per altre informazioni sulla funzionalità Sessioni disconnesse, vedere about_Remote_Disconnected_Sessions.
Questo cmdlet è stato introdotto in Windows PowerShell 3.0.
Esempio
Esempio 1 - Disconnettere una sessione in base al nome
Questo comando disconnette la UpdateSession
sessione PSSession nel computer Server01 dalla sessione corrente. Il comando usa il parametro Name per identificare la sessione PSSession.
PS> Disconnect-PSSession -Name UpdateSession
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 UpdateSession Server01 Disconnected Microsoft.PowerShell None
L'output mostra che il tentativo di disconnessione è riuscito. Lo stato della sessione è e la disponibilità è Disconnected
None
, che indica che la sessione non è occupata e può essere riconnessa.
Esempio 2- Disconnettere una sessione da un computer specifico
Questo comando disconnette la ITTask
sessione PSSession nel computer Server12 dalla sessione corrente. La ITTask
sessione è stata creata nella sessione corrente e si connette al computer Server12. Il comando usa il Get-PSSession
cmdlet per ottenere la sessione e il Disconnect-PSSession
cmdlet per disconnetterlo.
PS> Get-PSSession -ComputerName Server12 -Name ITTask |
Disconnect-PSSession -OutputBufferingMode Drop -IdleTimeoutSec 86400
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 ITTask Server12 Disconnected ITTasks None
Il Disconnect-PSSession
comando usa il parametro OutputBufferingMode per impostare la modalità di output su Drop
. Questa impostazione consente allo script in esecuzione nella sessione di continuare l'esecuzione anche se il buffer di output della sessione è pieno. Poiché lo script scrive l'output in un report in una condivisione file, la perdita di altri output non ha conseguenze.
Il comando usa anche il parametro IdleTimeoutSec per estendere il timeout di inattività della sessione a 24 ore. Questa impostazione fornisce all'amministratore o ad altri amministratori il tempo necessario per riconnettersi alla sessione per verificare l'esecuzione dello script e per risolvere eventuali problemi.
Esempio 3- Uso di più sessioni PSSession in più computer
Questa serie di comandi illustra come usare il Disconnect-PSSession
cmdlet in uno scenario aziendale. In questo caso, un nuovo tecnico avvia uno script in una sessione in un computer remoto e si verifica un problema. Il tecnico si disconnette dalla sessione in modo che un responsabile più esperto possa connettersi alla sessione e risolvere il problema.
PS> $s = New-PSSession -ComputerName Srv1, Srv2, Srv30 -Name ITTask
PS> Invoke-Command $s -FilePath \\Server01\Scripts\Get-PatchStatus.ps1
PS> Get-PSSession -Name ITTask -ComputerName Srv1 | Disconnect-PSSession
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 ITTask Srv1 Disconnected Microsoft.PowerShell None
PS> Get-PSSession -ComputerName Srv1, Srv2, Srv30 -Name ITTask
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 ITTask Srv1 Disconnected Microsoft.PowerShell None
2 ITTask Srv2 Opened Microsoft.PowerShell Available
3 ITTask Srv30 Opened Microsoft.PowerShell Available
PS> Get-PSSession -ComputerName Srv1 -Name ITTask -Credential Domain01\User01
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 ITTask Srv1 Disconnected Microsoft.PowerShell None
PS> $s = Connect-PSSession -ComputerName Srv1 -Name ITTask -Credential Domain01\User01
PS> Invoke-Command -Session $s {dir $HOME\Scripts\PatchStatusOutput.ps1}
PS> Invoke-Command -Session $s {mkdir $HOME\Scripts\PatchStatusOutput}
PS> Invoke-Command -Session $s -FilePath \\Server01\Scripts\Get-PatchStatus.ps1
PS> Disconnect-PSSession -Session $s
Il tecnico inizia creando sessioni in diversi computer remoti ed eseguendo uno script in ogni sessione. Il primo comando usa il New-PSSession
cmdlet per creare la ITTask
sessione in tre computer remoti. Il comando salva le sessioni nella $s
variabile . Il secondo comando usa il parametro FilePath del Invoke-Command
cmdlet per eseguire uno script nelle sessioni nella $s
variabile .
Lo script in esecuzione nel computer Srv1 genera errori imprevisti. Il tecnico contatta il suo responsabile e chiede assistenza. Il responsabile indirizza il tecnico a disconnettersi dalla sessione in modo che possa indagare. Il secondo comando usa il Get-PSSession
cmdlet per ottenere la ITTask
sessione nel computer Srv1 e il Disconnect-PSSession
cmdlet per disconnetterlo. Questo comando non influisce sulle ITTask
sessioni negli altri computer.
Il terzo comando usa il Get-PSSession
cmdlet per ottenere le ITTask
sessioni. L'output mostra che le ITTask
sessioni nei computer Srv2 e Srv30 non sono state interessate dal comando per disconnettersi.
Il manager accede al computer principale, si connette alla rete aziendale, avvia PowerShell e usa il Get-PSSession
cmdlet per ottenere la ITTask
sessione nel computer Srv1. Usa le credenziali del tecnico per accedere alla sessione.
Successivamente, il gestore usa il Connect-PSSession
cmdlet per connettersi alla ITTask
sessione nel computer Srv1. Il comando salva la sessione nella variabile $s
.
Il gestore usa il Invoke-Command
cmdlet per eseguire alcuni comandi di diagnostica nella sessione nella $s
variabile . Riconosce che lo script non è riuscito perché non ha trovato una directory obbligatoria.
Il manager usa la MkDir
funzione per creare la directory e quindi riavvia lo Get-PatchStatus.ps1
script e si disconnette dalla sessione. Il responsabile segnala i suoi risultati al tecnico, suggerisce di riconnettersi alla sessione per completare le attività e chiede di aggiungere un comando allo Get-PatchStatus.ps1
script che crea la directory necessaria, se non esiste.
Esempio 4- Modificare il valore di timeout per una sessione PSSession
In questo esempio viene illustrato come correggere il valore della proprietà IdleTimeout di una sessione in modo che possa essere disconnessa.
La proprietà IdleTimeout di una sessione è fondamentale per le sessioni disconnesse perché determina il tempo per cui una sessione disconnessa viene mantenuta prima di essere eliminata. L'opzione IdleTimeout può essere impostata quando si crea e quando si disconnette una sessione. I valori predefiniti per il timeout di inattività di una sessione vengono impostati nella $PSSessionOption
variabile di preferenza nel computer locale e nella configurazione della sessione nel computer remoto. I valori impostati per la sessione hanno la precedenza sui valori impostati nella configurazione della sessione, ma i valori della sessione non possono superare le quote impostate nella configurazione della sessione, ad esempio il valore MaxIdleTimeoutMs .
PS> $Timeout = New-PSSessionOption -IdleTimeout 172800000
PS> $s = New-PSSession -Computer Server01 -Name ITTask -SessionOption $Timeout
PS> Disconnect-PSSession -Session $s
Disconnect-PSSession : The session ITTask cannot be disconnected because the specified
idle timeout value 172800(seconds) is either greater than the server maximum allowed
43200 (seconds) or less that the minimum allowed60(seconds). Choose an idle time out
value that is within the allowed range and try again.
PS> Invoke-Command -ComputerName Server01 {Get-PSSessionConfiguration Microsoft.PowerShell} |
Format-List -Property *
Architecture : 64
Filename : %windir%\system32\pwrshplugin.dll
ResourceUri : http://schemas.microsoft.com/powershell/microsoft.powershell
MaxConcurrentCommandsPerShell : 1000
UseSharedProcess : false
ProcessIdleTimeoutSec : 0
xmlns : http://schemas.microsoft.com/wbem/wsman/1/config/PluginConfiguration
MaxConcurrentUsers : 5
lang : en-US
SupportsOptions : true
ExactMatch : true
RunAsUser :
IdleTimeoutms : 7200000
PSVersion : 3.0
OutputBufferingMode : Block
AutoRestart : false
SecurityDescriptorSddl : O:NSG:BAD:P(A;;GA;;;BA)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)
MaxMemoryPerShellMB : 1024
MaxIdleTimeoutms : 2147483647
Uri : http://schemas.microsoft.com/powershell/microsoft.powershell
SDKVersion : 2
Name : microsoft.powershell
XmlRenderingType : text
Capability : {Shell}
RunAsPassword :
MaxProcessesPerShell : 15
ParentResourceUri : http://schemas.microsoft.com/powershell/microsoft.powershell
Enabled : true
MaxShells : 25
MaxShellsPerUser : 25
Permission : BUILTIN\Administrators AccessAllowed
PSComputerName : localhost
RunspaceId : aea84310-6dbf-4c21-90ac-13980039925a
PSShowComputerName : True
PS> $s.Runspace.ConnectionInfo
ConnectionUri : http://Server01/wsman
ComputerName : Server01
Scheme : http
Port : 80
AppName : /wsman
Credential :
ShellUri : http://schemas.microsoft.com/powershell/Microsoft.PowerShell
AuthenticationMechanism : Default
CertificateThumbprint :
MaximumConnectionRedirectionCount : 5
MaximumReceivedDataSizePerCommand :
MaximumReceivedObjectSize : 209715200
UseCompression : True
NoMachineProfile : False
ProxyAccessType : None
ProxyAuthentication : Negotiate
ProxyCredential :
SkipCACheck : False
SkipCNCheck : False
SkipRevocationCheck : False
NoEncryption : False
UseUTF16 : False
OutputBufferingMode : Drop
IncludePortInSPN : False
Culture : en-US
UICulture : en-US
OpenTimeout : 180000
CancelTimeout : 60000
OperationTimeout : 180000
IdleTimeout : 172800000
PS> Disconnect-PSSession $s -IdleTimeoutSec 43200
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
4 ITTask Server01 Disconnected Microsoft.PowerShell None
PS> $s.Runspace.ConnectionInfo.IdleTimeout
43200000
Il primo comando usa il New-PSSessionOption
cmdlet per creare un oggetto opzione di sessione. Usa il parametro IdleTimeout per impostare un timeout di inattività di 48 ore (172800000
millisecondi). Il comando salva l'oggetto opzione di sessione nella $Timeout
variabile .
Il secondo comando usa il New-PSSession
cmdlet per creare la ITTask
sessione nel computer Server01. Il comando salva la sessione nella $s
variabile. Il valore del parametro SessionOption è il timeout di inattività di 48 ore nella $Timeout
variabile.
Il terzo comando disconnette la ITTask
sessione nella $s
variabile . Il comando ha esito negativo perché il valore di timeout di inattività della sessione supera la quota MaxIdleTimeoutMs nella configurazione della sessione. Poiché il timeout di inattività non viene usato fino a quando la sessione non viene disconnessa, questa violazione può non essere rilevata mentre la sessione è in uso.
Il quarto comando usa il Invoke-Command
cmdlet per eseguire un Get-PSSessionConfiguration
comando per la configurazione della Microsoft.PowerShell
sessione nel computer Server01. Il comando usa il Format-List
cmdlet per visualizzare tutte le proprietà della configurazione della sessione in un elenco. L'output mostra che la proprietà MaxIdleTimeoutMS, che stabilisce il valore IdleTimeout massimo consentito per le sessioni che usano la configurazione della sessione, è 43200000
in millisecondi (12 ore).
Il quinto comando ottiene i valori delle opzioni di sessione della sessione nella $s
variabile . I valori di molte opzioni di sessione sono proprietà della proprietà ConnectionInfo della proprietà Runspace della sessione. L'output mostra che il valore della proprietà IdleTimeout della sessione è 172800000
di millisecondi (48 ore), che viola la quota MaxIdleTimeoutMs di 12 ore nella configurazione della sessione. Per risolvere questo conflitto, è possibile usare il parametro ConfigurationName per selezionare una configurazione di sessione diversa o usare il parametro IdleTimeout per ridurre il timeout di inattività della sessione.
Il sesto comando disconnette la sessione. Usa il parametro IdleTimeoutSec per impostare il timeout di inattività sul valore massimo di 12 ore.
Il settimo comando ottiene il valore della proprietà IdleTimeout della sessione disconnessa, misurata in millisecondi. L'output conferma che il comando è riuscito.
Parametri
-Confirm
Richiede conferma prima di eseguire il cmdlet.
Tipo: | SwitchParameter |
Alias: | cf |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Id
Esegue la disconnessione da sessioni con un ID sessione specificato. Digitare uno o più ID (separati da virgole) o usare l'operatore di intervallo (..
) per specificare un intervallo di ID.
Per ottenere l'ID di una sessione, usare il Get-PSSession
cmdlet . L'ID istanza viene archiviato nella proprietà ID della sessione.
Tipo: | Int32[] |
Posizione: | 1 |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-IdleTimeoutSec
Modifica il valore di timeout di inattività della sessione PSSession disconnessa. Immettere un valore in secondi. Il valore minimo è 60
(1 minuto).
Il timeout di inattività determina per quanto tempo viene mantenuta la sessione PSSession disconnessa nel computer remoto. Alla scadenza del timeout, la sessione PSSession viene eliminata.
Le sessioni PSSession disconnesse vengono considerate inattive dal momento in cui sono disconnesse, anche se i comandi sono in esecuzione nella sessione disconnessa.
Il valore predefinito per il timeout di inattività di una sessione viene impostato dal valore della proprietà IdleTimeoutMs della configurazione della sessione. Il valore predefinito è 7200000
millisecondi (2 ore).
Il valore di questo parametro ha la precedenza sul valore della proprietà IdleTimeout della $PSSessionOption
variabile di preferenza e sul valore di timeout di inattività predefinito nella configurazione della sessione. Tuttavia, questo valore non può superare il valore della proprietà MaxIdleTimeoutMs della configurazione della sessione. Il valore predefinito di MaxIdleTimeoutMs è di 12 ore (43200000
millisecondi).
Tipo: | Int32 |
Posizione: | Named |
Valore predefinito: | 60 |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-InstanceId
Esegue la disconnessione da sessioni con ID istanza specificati.
L'ID istanza è un GUID che identifica in modo univoco una sessione in un computer locale o remoto. L'ID istanza è univoco anche in più sessioni in più computer.
Per ottenere l'ID istanza di una sessione, usare il Get-PSSession
cmdlet . L'ID istanza viene archiviato nella proprietà InstanceID della sessione.
Tipo: | Guid[] |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-Name
Esegue la disconnessione da sessioni con nomi descrittivi specificati. I caratteri jolly sono consentiti.
Per ottenere il nome descrittivo di una sessione, usare il Get-PSSession
cmdlet . Il nome descrittivo viene archiviato nella proprietà Name della sessione.
Tipo: | String[] |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | True |
-OutputBufferingMode
Determina la modalità di gestione dell'output del comando in una sessione disconnessa quando il buffer di output è pieno. Il valore predefinito è Block
.
Se il comando in una sessione disconnessa restituisce output e il buffer di output si riempie, il valore di questo parametro determina se continuare a eseguire il comando quando la sessione è disconnessa. Un valore di Block
sospende il comando fino a quando la sessione non viene riconnessa. Un valore di Drop
consente il completamento del comando, anche se i dati potrebbero andare persi. Quando si usa il Drop
valore , reindirizzare l'output del comando a un file su disco.
I valori validi sono:
Block
: quando il buffer di output è pieno, l'esecuzione viene sospesa fino a quando il buffer non viene cancellato.Drop
: quando il buffer di output è pieno, l'esecuzione continua. Man mano che viene salvato il nuovo output, l'output meno recente viene eliminato.None
: non è specificata alcuna modalità di buffering di output. Il valore della proprietà OutputBufferingMode della configurazione della sessione viene utilizzato per la sessione disconnessa.
Tipo: | OutputBufferingMode |
Posizione: | Named |
Valore predefinito: | Block |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Session
Si disconnette dalle sessioni PSSession specificate. Immettere gli oggetti PSSession , ad esempio quelli restituiti dal New-PSSession
cmdlet. È anche possibile inviare tramite pipe un oggetto PSSession a Disconnect-PSSession
.
Il Get-PSSession
cmdlet può ottenere tutte le sessioni PSSession che terminano in un computer remoto, incluse le sessioni PSSession disconnesse e PSSession connesse ad altre sessioni in altri computer. Disconnect-PSSession
disconnette solo PSSession connessi alla sessione corrente. Se si inviano tramite pipe altre sessioni PSSession a Disconnect-PSSession
, il Disconnect-PSSession
comando ha esito negativo.
Tipo: | PSSession[] |
Posizione: | 1 |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-ThrottleLimit
Imposta il limite di limitazione per il Disconnect-PSSession
comando.
Il limite specifica il numero massimo di connessioni simultanee che è possibile stabilire per eseguire il comando. Se si omette questo parametro o si immette un valore pari 0
a , viene usato il valore predefinito , 32
.
Questo valore limite si applica solo al comando corrente, non alla sessione o al computer.
Tipo: | Int32 |
Posizione: | Named |
Valore predefinito: | 32 |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-WhatIf
Mostra gli effetti dell'esecuzione del cmdlet. Il cmdlet non viene eseguito.
Tipo: | SwitchParameter |
Alias: | wi |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
Input
È possibile inviare tramite pipe una sessione a questo cmdlet.
Output
Questo cmdlet restituisce un oggetto che rappresenta la sessione disconnessa.
Note
Windows PowerShell include gli alias seguenti per Disconnect-PSSession
:
dnsn
Il
Disconnect-PSSession
cmdlet funziona solo quando i computer locali e remoti eseguono PowerShell 3.0 o versione successiva.Se si usa il
Disconnect-PSSession
cmdlet in una sessione disconnessa, il comando non ha alcun effetto sulla sessione e non genera errori.Le sessioni di loopback disconnesse con token di sicurezza interattivi (quelli creati con il parametro EnableNetworkAccess ) possono essere riconnesse solo dal computer in cui è stata creata la sessione. Questa restrizione protegge il computer da accessi non autorizzati.
Quando si disconnette una sessione PSSession, lo stato della sessione è
Disconnected
e la disponibilità è Nessuno.Il valore della proprietà State è relativo alla sessione corrente. Pertanto, un valore indica
Disconnected
che la sessione PSSession non è connessa alla sessione corrente. Tuttavia, non significa che la sessione PSSession sia disconnessa da tutte le sessioni. È possibile che sia connessa a una sessione diversa. Per determinare se è possibile connettersi o riconnettersi alla sessione, utilizzare la proprietà Availability .Un valore availability indica
None
che è possibile connettersi alla sessione. Un valore indicaBusy
che non è possibile connettersi alla sessione PSSession perché è connessa a un'altra sessione.Per altre informazioni sui valori della proprietà State delle sessioni, vedere Enumerazione RunspaceState.
Per altre informazioni sui valori della proprietà Availability delle sessioni, vedere Enumerazione RunspaceAvailability.