Condividi tramite


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

Questo cmdlet è disponibile solo nella piattaforma Windows.

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-PSSessionnon è 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 0a , 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

PSSession

È possibile inviare tramite pipe una sessione a questo cmdlet.

Output

PSSession

Questo cmdlet restituisce un oggetto che rappresenta la sessione disconnessa.

Note

PowerShell include gli alias seguenti per Disconnect-PSSession:

  • Windows:
    • dnsn

Questo cmdlet è disponibile solo nelle piattaforme Windows.

  • 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 indica Busy 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.