Condividi tramite


Disconnect-PSSession

Si disconnette 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 cmdlet Disconnect-PSSession disconnette una sessione di PowerShell (PSSession), ad esempio una sessione avviata usando il cmdlet New-PSSession, dalla sessione corrente. Di conseguenza, il PSSession si trova in uno stato disconnesso. È possibile connettersi al PSSession disconnesso dalla sessione corrente o da un'altra sessione nel computer locale o in un altro computer.

Il cmdlet Disconnect-PSSession si disconnette solo pssessioni connesse alla sessione corrente. Disconnect-PSSession non è possibile disconnettersi o chiudere PSSessionso interattive PSSessions avviate usando il cmdlet Enter-PSSession e non è possibile disconnettere pssessioni connesse ad altre sessioni.

Per riconnettersi a un PSSession disconnesso, usare i cmdlet Connect-PSSession o Receive-PSSession.

Quando un PSSession è disconnesso, i comandi nella sessione PSSession continuano a essere eseguiti fino al completamento, a meno che il PSSession o i comandi nella PSSession siano 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 cmdlet Invoke-Command 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 il PSSession nel computer Server01 dalla sessione corrente. Il comando usa il parametro Name per identificare il 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 il disponibilità è , che indica che la sessione non è occupata e può essere riconnessa.

Esempio 2- Disconnettere una sessione da un computer specifico

Questo comando disconnette il PSSession nel computer Server12 dalla sessione corrente. La sessione ITTask è stata creata nella sessione corrente e si connette al computer Server12. Il comando usa il cmdlet Get-PSSession per ottenere la sessione e il cmdlet Disconnect-PSSession 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 comando Disconnect-PSSession usa il parametro OutputBufferingMode per impostare la modalità di output su Drop. Questa impostazione garantisce che lo script in esecuzione nella sessione possa continuare a essere eseguito anche se il buffer di output della sessione è pieno. Poiché lo script scrive l'output in un report in una condivisione file, l'altro output può essere perso senza conseguenze.

Il comando usa anche il parametro IdleTimeoutSec per estendere il timeout di inattività della sessione a 24 ore. Questa impostazione consente a questo amministratore o ad altri amministratori di riconnettersi alla sessione per verificare che lo script sia stato eseguito e risolvere i problemi, se necessario.

Esempio 3- Uso di più sessioni PSSession in più computer

Questa serie di comandi illustra come usare il cmdlet Disconnect-PSSession 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 manager 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 cmdlet New-PSSession per creare la sessione di ITTask in tre computer remoti. Il comando salva le sessioni nella variabile $s. Il secondo comando usa il parametro FilePath del cmdlet per eseguire uno script nelle sessioni nella 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 cmdlet Get-PSSession per ottenere la sessione di ITTask nel computer Srv1 e il cmdlet Disconnect-PSSession per disconnetterlo. Questo comando non influisce sulle sessioni ITTask negli altri computer.

Il terzo comando usa il cmdlet Get-PSSession per ottenere le sessioni di ITTask. L'output mostra che le sessioni ITTask nei computer Srv2 e Srv30 non sono state interessate dal comando per disconnettersi.

Il responsabile accede al computer di casa, si connette alla rete aziendale, avvia PowerShell e usa il cmdlet Get-PSSession per ottenere la sessione di ITTask nel computer Srv1. Usa le credenziali del tecnico per accedere alla sessione.

Successivamente, il gestore usa il cmdlet Connect-PSSession per connettersi alla sessione di ITTask nel computer Srv1. Il comando salva la sessione nella variabile $s.

Il gestore usa il cmdlet Invoke-Command per eseguire alcuni comandi di diagnostica nella sessione nella variabile $s. Riconosce che lo script non è riuscito perché non ha trovato una directory obbligatoria. Il manager usa la funzione MkDir per creare la directory e quindi riavvia lo script Get-PatchStatus.ps1 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 script Get-PatchStatus.ps1 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à di timeout di inattività di una sessione è fondamentale per le sessioni disconnesse, perché determina per quanto tempo viene mantenuta una sessione disconnessa prima dell'eliminazione. È possibile impostare l'opzione di timeout di inattività quando si crea una sessione e quando si disconnette. I valori predefiniti per il timeout di inattività di una sessione vengono impostati nella variabile di preferenza $PSSessionOption 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 valore.

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 cmdlet New-PSSessionOption per creare un oggetto opzione di sessione. Usa il parametro IdleTimeout per impostare un timeout di inattività di 48 ore ( millisecondi). Il comando salva l'oggetto opzione di sessione nella variabile $Timeout.

Il secondo comando usa il cmdlet New-PSSession per creare la sessione di ITTask nel computer Server01. Il comando salva la sessione nella variabile $s. Il valore del parametro SessionOption è il timeout di inattività di 48 ore nella variabile $Timeout.

Il terzo comando disconnette la sessione di ITTask nella variabile $s. Il comando ha esito negativo perché il valore di timeout di inattività della sessione supera il MaxIdleTimeoutMs quota 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 cmdlet Invoke-Command per eseguire un comando Get-PSSessionConfiguration per la configurazione della sessione Microsoft.PowerShell nel computer Server01. Il comando usa il cmdlet per visualizzare tutte le proprietà della configurazione della sessione in un elenco. L'output mostra che la proprietà MaxIdleTimeoutMS, che stabilisce il valore massimo consentito IdleTimeout per le sessioni che usano la configurazione della sessione, è millisecondi (12 ore).

Il quinto comando ottiene i valori delle opzioni di sessione della sessione nella variabile $s. 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 è millisecondi (48 ore), che viola il MaxIdleTimeoutMs quota 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

Si disconnette dalle sessioni con l'ID sessione specificato. Digitare uno o più ID (separati da virgole) oppure usare l'operatore di intervallo (..) per specificare un intervallo di ID.

Per ottenere l'ID di una sessione, usare il cmdlet Get-PSSession. 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à del PSSession disconnesso. Immettere un valore in secondi. Il valore minimo è 60 (1 minuto).

Il timeout di inattività determina per quanto tempo il PSSession disconnesso viene mantenuto nel computer remoto. Alla scadenza del timeout, il PSSession viene eliminato.

Disconnesso PSSessions vengono considerati inattive dal momento in cui sono disconnessi, 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 dell'IdleTimeoutMs proprietà 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 variabile di preferenza $PSSessionOption e sul valore di timeout di inattività predefinito nella configurazione della sessione. Tuttavia, questo valore non può superare il valore del MaxIdleTimeoutMs proprietà della configurazione della sessione. Il valore predefinito di MaxIdleTimeoutMs è 12 ore (43200000 millisecondi).

Tipo:Int32
Posizione:Named
Valore predefinito:60
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-InstanceId

Disconnette dalle sessioni con gli 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 cmdlet Get-PSSession. 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

Disconnette dalle sessioni con i nomi descrittivi specificati. Sono consentiti caratteri jolly.

Per ottenere il nome descrittivo di una sessione, usare il cmdlet Get-PSSession. Il nome descrittivo viene archiviato nella proprietà Nome 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 dei comandi nella sessione disconnessa quando il buffer di output è pieno. Il valore predefinito è Block.

Se il comando nella sessione disconnessa restituisce l'output e il buffer di output viene riempito, il valore di questo parametro determina in modo efficace se il comando continua a essere eseguito mentre la sessione è disconnessa. Il valore 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 valore Drop, 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. Quando viene salvato un nuovo output, l'output meno recente viene eliminato.
  • None: non viene specificata alcuna modalità di buffering di output. Il valore della proprietà OutputBufferingMode della configurazione della sessione viene utilizzata 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 dalla sessione PSSessions specificata. Immettere oggetti PSSession, ad esempio quelli restituiti dal cmdlet New-PSSession. È anche possibile inviare tramite pipe un oggetto PSSession a .

Il cmdlet può ottenere tutti i PSSessioni che terminano in un computer remoto, inclusi pssessioni disconnesse e pssessioni connesse ad altre sessioni in altri computer. Disconnect-PSSession disconnette solo PSSession connessi alla sessione corrente. Se si invia tramite pipe altri PSSessions a Disconnect-PSSession, il comando Disconnect-PSSession 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 comando Disconnect-PSSession.

Il limite di limitazione è il numero massimo di connessioni simultanee che è possibile stabilire per eseguire questo comando. Se si omette questo parametro o si immette un valore di 0, viene usato il valore predefinito 32.

Il limite di limitazione 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 cosa accadrebbe se il cmdlet viene eseguito. 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:

  • Finestre:
    • dnsn

Questo cmdlet è disponibile solo nelle piattaforme Windows.

  • Il cmdlet Disconnect-PSSession funziona solo quando i computer locali e remoti eseguono PowerShell 3.0 o versione successiva.

  • Se si usa il cmdlet Disconnect-PSSession 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 (quelle create con il parametro EnableNetworkAccess) possono essere riconnesse solo dal computer in cui è stata creata la sessione. Questa restrizione protegge il computer da accessi dannosi.

  • Quando si disconnette unPSSession , lo stato della sessione è e la disponibilità è Nessuno.

    Il valore della proprietà state è relativo alla sessione corrente. Pertanto, un valore di indica che il pssession non è connesso alla sessione corrente. Tuttavia, non significa che il PSSession è disconnesso da tutte le sessioni. Potrebbe essere connesso a una sessione diversa. Per determinare se è possibile connettersi o riconnettersi alla sessione, utilizzare la proprietà disponibilità .

    Un valore availability di None indica che è possibile connettersi alla sessione. Un valore di indica che non è possibile connettersi al PSSession perché è connesso a un'altra sessione.

    Per altre informazioni sui valori della proprietà state delle sessioni, vedere RunspaceState Enumeration.

    Per altre informazioni sui valori della proprietà availability delle sessioni, vedere RunspaceAvailability Enumeration.