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
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 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
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 è
Esempio 2- Disconnettere una sessione da un computer specifico
Questo comando disconnette il PSSession 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
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 $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
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
Il sesto comando disconnette la sessione. Usa il parametro IdleTimeoutSec
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
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
Il cmdlet 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
È possibile inviare tramite pipe una sessione a questo cmdlet.
Output
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 disponibilità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à . Un valore availability di
None
indica che è possibile connettersi alla sessione. Un valore diindica 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 .