Disconnect-PSSession
中斷與會話的連線。
語法
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>]
Description
此 Cmdlet 僅適用於 Windows 平臺。
Cmdlet 會 Disconnect-PSSession
中斷 PowerShell 工作階段 (PSSession) 的連線,例如使用 New-PSSession
Cmdlet 從目前工作階段啟動的工作階段。 因此, PSSession 處於中斷聯機狀態。 您可以從目前工作階段或本機電腦或不同電腦上的另一個工作階段連線到中斷 連線的 PSSession 。
Cmdlet Disconnect-PSSession
只會中斷連線 至目前會話的 PSSession 。 Disconnect-PSSession
無法中斷中斷或關閉的 PSSessions,或是使用 Enter-PSSession
Cmdlet 啟動的互動式 PSSession,而且無法中斷連線到其他會話的 PSSession。
若要重新連線到已中斷連線 的 PSSession,請使用 Connect-PSSession
或 Receive-PSSession
Cmdlet。
當 PSSession 中斷連線時,除非 PSSession 逾時或 PSSession 中的命令遭到完整輸出緩衝區封鎖,否則 PSSession 中的命令會繼續執行,直到它們完成為止。 若要變更閑置逾時,請使用 IdleTimeoutSec 參數。 若要變更輸出緩衝模式,請使用 OutputBufferingMode 參數 您也可以使用 Cmdlet 的 Invoke-Command
InDisconnectedSession 參數,在中斷連線的會話中執行命令。
如需中斷聯機會話功能的詳細資訊,請參閱 about_Remote_Disconnected_Sessions。
此 Cmdlet 是在 Windows PowerShell 3.0 中引進的。
範例
範例 1 - 依名稱中斷會話連線
此命令會UpdateSession
中斷 Server01 電腦上的 PSSession 與目前會話的連線。 此命令會使用 Name 參數來識別 PSSession。
PS> Disconnect-PSSession -Name UpdateSession
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 UpdateSession Server01 Disconnected Microsoft.PowerShell None
輸出顯示嘗試中斷連線成功。 會話狀態為 Disconnected
, 而可用性 為 None
,表示會話不忙碌且可重新連線。
範例 2 - 中斷會話與特定電腦的連線
此命令會ITTask
中斷 Server12 電腦上的 PSSession 與目前工作階段的連線。 會話 ITTask
是在目前的會話中建立,並連線到 Server12 計算機。 命令會 Get-PSSession
使用 Cmdlet 來取得會話和 Disconnect-PSSession
Cmdlet 來中斷連線。
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
Disconnect-PSSession
命令會使用 OutputBufferingMode 參數將輸出模式設定為 Drop
。 此設定可確保會話中執行的腳本可以繼續執行,即使會話輸出緩衝區已滿也一樣。 因為腳本會將其輸出寫入檔案共用上的報表,因此可能會遺失其他輸出,而不會造成任何後果。
此命令也會使用 IdleTimeoutSec 參數,將會話的閒置逾時延長為24小時。 此設定可讓此系統管理員或其他系統管理員重新連線到會話的時間,以確認腳本已執行,並視需要進行疑難解答。
範例 3 - 在多部計算機上使用多個 PSSession
這一系列命令顯示 Cmdlet 如何在 Disconnect-PSSession
企業案例中使用。 在此情況下,新的技術人員會在遠端電腦上的會話中啟動腳本,併發生問題。 技術人員會中斷與會話的連線,讓更有經驗的管理員可以連線到會話並解決問題。
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
技術人員首先會在數部遠端計算機上建立會話,並在每個會話中執行腳本。 第一個命令會 New-PSSession
使用 Cmdlet 在三部遠端電腦上建立 ITTask
會話。 命令會將會話儲存在變數中 $s
。 第二個命令會使用 Cmdlet 的 Invoke-Command
FilePath 參數,在變數的會話$s
中執行腳本。
在 Srv1 電腦上執行的腳本會產生非預期的錯誤。 技術人員聯繫他的經理,並尋求協助。 經理指示技術人員中斷與會話的連線,以便他能夠調查。第二個命令會 Get-PSSession
使用 Cmdlet 取得 ITTask
Srv1 計算機上的會話,以及 Disconnect-PSSession
Cmdlet 來中斷連線。 此命令不會影響 ITTask
其他電腦上的會話。
第三個命令會 Get-PSSession
使用 Cmdlet 來取得 ITTask
會話。 輸出顯示 ITTask
Srv2 和 Srv30 電腦上的會話不會受到命令中斷連線的影響。
管理員登入主計算機、連線到公司網路、啟動 PowerShell,並使用 Get-PSSession
Cmdlet 取得 ITTask
Srv1 計算機上的會話。 他使用技術人員的認證來存取會話。
接下來,管理員會使用 Connect-PSSession
Cmdlet 連線到 ITTask
Srv1 計算機上的會話。 命令會將會話儲存在變數中 $s
。
管理員會 Invoke-Command
使用 Cmdlet 在變數的會話 $s
中執行一些診斷命令。 他認識到腳本失敗,因為它找不到必要的目錄。
管理員會使用 函 MkDir
式來建立目錄,然後重新啟動 Get-PatchStatus.ps1
腳本並中斷會話的連線。經理向技術人員報告他的發現,建議他重新連線到會話以完成工作,並要求他將命令新增至腳本, Get-PatchStatus.ps1
以在不存在時建立所需的目錄。
範例 4 - 變更 PSSession 的逾時值
此範例示範如何更正 會話的IdleTimeout 屬性值,以便中斷連線。
會話的閑置逾時屬性對於中斷連線的會話至關重要,因為它會決定在刪除會話之前,中斷連線的會話維持多久。 您可以在建立工作階段和中斷連線時設定閒置逾時選項。 會話閑置逾時的預設值會設定在 $PSSessionOption
本機電腦上的喜好設定變數和遠端電腦上的會話組態中。 會話設定的值優先於會話設定中設定的值,但會話值不能超過會話設定中設定的配額,例如 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
第一個命令會 New-PSSessionOption
使用 Cmdlet 來建立會話選項物件。 它會使用 IdleTimeout 參數來設定閑置逾時48小時(172800000
毫秒)。 命令會將會話選項物件儲存在變數中 $Timeout
。
第二個命令會 New-PSSession
使用 Cmdlet 在 Server01 計算機上建立 ITTask
會話。 命令會將會話儲存在變數中 $s
。 SessionOption 參數的值是變數中的 $Timeout
48 小時閒置逾時。
第三個命令會 ITTask
中斷變數中的 $s
會話連線。 命令失敗,因為會話的閑置逾時值超過 會話組態中的 MaxIdleTimeoutMs 配額。 由於在會話中斷連線之前不會使用閑置逾時,因此當會話正在使用時,此違規可能會無法偵測到。
第四個Get-PSSessionConfiguration
命令會Invoke-Command
使用 Cmdlet 在 Server01 計算機上執行工作階段設定的命令Microsoft.PowerShell
。 命令會 Format-List
使用 Cmdlet 在清單中顯示工作階段組態的所有屬性。輸出會顯示 MaxIdleTimeoutMS 屬性,它會為使用會話設定的會話建立允許 的IdleTimeout 值上限為 43200000
毫秒(12小時)。
第五個命令會取得變數中 $s
會話的會話選項值。 許多工作階段選項的值都是會話 Runspace 屬性的 ConnectionInfo 屬性的屬性。輸出顯示會話的IdleTimeout屬性值為172800000
毫秒(48小時),這違反了會話組態中12小時的 MaxIdleTimeoutMs 配額。若要解決衝突,您可以使用 ConfigurationName 參數來選取不同的會話組態,或使用 IdleTimeout 參數來減少會話的閒置逾時。
第六個命令會中斷會話的連線。 它會使用 IdleTimeoutSec 參數,將閒置逾時設定為12小時上限。
第七個命令會取得 已中斷聯機會話的IdleTimeout 屬性值,以毫秒為單位。 輸出會確認命令成功。
參數
-Confirm
執行 Cmdlet 之前先提示您確認。
類型: | SwitchParameter |
別名: | cf |
Position: | Named |
預設值: | False |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-Id
使用指定的會話標識碼中斷與會話的連線。 輸入一或多個識別碼(以逗號分隔),或使用範圍運算符 (..
) 來指定識別碼的範圍。
若要取得會話的標識符,請使用 Get-PSSession
Cmdlet。 實例標識碼會儲存在 會話的ID 屬性中。
類型: | Int32[] |
Position: | 1 |
預設值: | None |
必要: | True |
接受管線輸入: | True |
接受萬用字元: | False |
-IdleTimeoutSec
變更已中斷連線 PSSession 的閑置逾時值。 以秒為單位輸入值。 最小值為 60
(1 分鐘)。
閑置逾時會決定在遠端計算機上維護中斷連線 的 PSSession 多久。 逾時到期時, 會刪除 PSSession 。
中斷連線的 PSSession 會被視為在中斷連線時閒置,即使命令是在中斷連線的會話中執行也一樣。
會話閑置逾時的預設值是由 會話組態的IdleTimeoutMs 屬性值所設定。 預設值為 7200000
毫秒(2 小時)。
此參數的值優先於 喜好設定變數的IdleTimeout 屬性值 $PSSessionOption
,以及會話組態中的預設閑置逾時值。 不過,此值不能超過 會話組態的 MaxIdleTimeoutMs 屬性值。 MaxIdleTimeoutMs 的預設值為 12 小時(43200000
毫秒)。
類型: | Int32 |
Position: | Named |
預設值: | 60 |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-InstanceId
中斷與具有指定實例標識碼之會話的連接。
實例標識碼是 GUID,可唯一識別本機或遠端電腦上的會話。 實例標識碼是唯一的,即使在多部計算機上的多個會話之間也是如此。
若要取得會話的實例標識碼,請使用 Get-PSSession
Cmdlet。 實例標識碼會儲存在 會話的 InstanceID 屬性中。
類型: | Guid[] |
Position: | Named |
預設值: | None |
必要: | True |
接受管線輸入: | True |
接受萬用字元: | False |
-Name
使用指定的易記名稱中斷與會話的連接。 允許通配符。
若要取得會話的易記名稱,請使用 Get-PSSession
Cmdlet。 易記名稱會儲存在 會話的 Name 屬性中。
類型: | String[] |
Position: | Named |
預設值: | None |
必要: | True |
接受管線輸入: | True |
接受萬用字元: | True |
-OutputBufferingMode
決定當輸出緩衝區已滿時,命令輸出在中斷連線的會話中管理的方式。 預設值是 Block
。
如果中斷聯機會話中的命令傳回輸出,且輸出緩衝區填滿,此參數的值會有效判斷命令在會話中斷連線時是否繼續執行。 的值 Block
會暫停命令,直到會話重新連線為止。 的值 Drop
可讓 命令完成,不過數據可能會遺失。 使用 Drop
值時,請將命令輸出重新導向至磁碟上的檔案。
有效值為:
Block
:當輸出緩衝區已滿時,執行會暫停,直到緩衝區清除為止。Drop
:當輸出緩衝區已滿時,繼續執行。 儲存新輸出時,會捨棄最舊的輸出。None
:未指定輸出緩衝模式。 會話組態的 OutputBufferingMode 屬性值會用於中斷連線的會話。
類型: | OutputBufferingMode |
Position: | Named |
預設值: | Block |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-Session
中斷與指定 PSSessions 的連接。 輸入 PSSession 物件,例如 Cmdlet 傳回的物件 New-PSSession
。 您也可以使用管線將 PSSession 物件傳送至 Disconnect-PSSession
。
Cmdlet Get-PSSession
可以取得在遠端電腦上終止的所有 PSSession ,包括 已中斷連線的 PSSession ,以及 連線到其他電腦上其他會話的 PSSession 。 Disconnect-PSSession
只會 中斷連線到目前會話的 PSSession 。 如果您將其他 PSSession 傳送至 Disconnect-PSSession
,命令會 Disconnect-PSSession
失敗。
類型: | PSSession[] |
Position: | 1 |
預設值: | None |
必要: | True |
接受管線輸入: | True |
接受萬用字元: | False |
-ThrottleLimit
設定命令的 Disconnect-PSSession
節流限制。
節流限制是可以建立以執行此命令的並行連線數目上限。 如果您省略此參數或輸入的值 0
,則會使用預設值 32
、 。
節流限制僅適用於目前的命令,不適用於會話或計算機。
類型: | Int32 |
Position: | Named |
預設值: | 32 |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-WhatIf
顯示執行 Cmdlet 後會發生的情況。 未執行 Cmdlet。
類型: | SwitchParameter |
別名: | wi |
Position: | Named |
預設值: | False |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
輸入
您可以使用管線將會話傳送至此 Cmdlet。
輸出
此 Cmdlet 會傳回物件,代表它中斷連線的會話。
備註
PowerShell 包含下列的 Disconnect-PSSession
別名:
- Windows:
dnsn
此 Cmdlet 僅適用於 Windows 平臺。
只有在本機和遠端電腦執行 PowerShell 3.0 或更新版本時,Cmdlet
Disconnect-PSSession
才能運作。如果您在
Disconnect-PSSession
中斷連線的會話上使用 Cmdlet,則命令不會影響會話,而且不會產生錯誤。具有互動式安全性令牌的中斷連線回送會話(使用 EnableNetworkAccess 參數建立的工作階段)只能從建立工作階段的電腦重新連線。 這項限制可保護計算機免於惡意存取。
當您中斷 PSSession 的連線時,會話狀態為
Disconnected
,而可用性為 None。State 屬性的值相對於目前的會話。 因此,的值
Disconnected
表示 PSSession 未連線到目前的會話。 不過,這並不表示 PSSession 與所有會話中斷連線。 它可能會連線到不同的會話。 若要判斷您是否可以連線或重新連線到會話,請使用 Availability 屬性。的可用性值
None
表示您可以連線到會話。 的值Busy
表示您無法連線到 PSSession ,因為它已連線到另一個會話。如需會話之 State 屬性值的詳細資訊,請參閱 RunspaceState 列舉。
如需會話之 Availability 屬性值的詳細資訊,請參閱 RunspaceAvailability 列舉。