Disconnect-PSSession
會從會話中斷線。
語法
Session (預設值)
Disconnect-PSSession
[-Session] <PSSession[]>
[-IdleTimeoutSec <Int32>]
[-OutputBufferingMode <OutputBufferingMode>]
[-ThrottleLimit <Int32>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Name
Disconnect-PSSession
-Name <String[]>
[-IdleTimeoutSec <Int32>]
[-OutputBufferingMode <OutputBufferingMode>]
[-ThrottleLimit <Int32>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
InstanceId
Disconnect-PSSession
-InstanceId <Guid[]>
[-IdleTimeoutSec <Int32>]
[-OutputBufferingMode <OutputBufferingMode>]
[-ThrottleLimit <Int32>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Id
Disconnect-PSSession
[-Id] <Int32[]>
[-IdleTimeoutSec <Int32>]
[-OutputBufferingMode <OutputBufferingMode>]
[-ThrottleLimit <Int32>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Description
此 Cmdlet 只能在 Windows 平臺上使用。
該 Disconnect-PSSession cmdlet 會將 PowerShell 會話(PSSession),例如由該 New-PSSession cmdlet 啟動的,與目前的會話斷開連結。 因此, PSSession 處於斷開狀態。 你可以從目前的會話或本地電腦的另一台連線到已斷開的 PSSession ,或是其他電腦。
Disconnect-PSSession該指令只斷開與當前會話相連的未開啟 PSSessions。
Disconnect-PSSession無法斷開故障或關閉的 PSSessions,或使用 Enter-PSSession cmdlet 啟動的互動式 PSSessions,也無法斷開連接其他會話的 PSSessions。
若要重新連接已斷線的 PSSession,請使用 Connect-PSSession 或 指令(cmdlet Receive-PSSession )。
當 PSSession 斷線時,PSSession 中的指令會持續執行直到完成,除非 PSSession 逾時或指令被完整的輸出緩衝區阻擋。 要更改閒置逾時,請使用 IdleTimeoutSec 參數。 要更改輸出緩衝模式,請使用 OutputBufferingMode 參數。你也可以使用 cmdlet 中的 Invoke-CommandInDisconnectedSession 參數,在斷開的連線會話中執行指令。
如需有關斷線會話功能的更多資訊,請參閱 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 電腦。 指令使用 cmdlet 來取得會話,並用 Get-PSSessionDisconnect-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-PSSessionOutputBufferingMode 參數將輸出模式設定為 Drop。 此設定確保即使工作階段輸出緩衝區已滿,執行中的腳本仍能繼續執行。 由於腳本會將輸出寫入檔案共享的報告,其他輸出可能會遺失且不會有後果。
指令同時使用 IdleTimeoutSec 參數將閒置逾時延長至 24 小時。 此設定允許該管理員或其他管理員重新連接會話,以確認腳本是否執行,並在需要時進行故障排除。
範例三 - 在多台電腦上使用多個 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-CommandFilePath 參數,在變數的$s會話中執行腳本。
Srv1 電腦上執行的腳本會產生意想不到的錯誤。 技術人員聯絡了他的經理並請求協助。 經理指示技術員斷開會議,以便進行調查。第二個指令是用 Get-PSSession cmdlet 取得 srv1 電腦的 ITTask 會話,然後用 Disconnect-PSSession cmdlet 斷開它。 此指令不影響 ITTask 其他電腦的會話。
第三個指令是用 Get-PSSession cmdlet 來取得 sessions。ITTask 輸出顯示 ITTask Srv2 和 Srv30 電腦的會話未受到斷線指令的影響。
經理登入家用電腦,連接企業網路,啟動 PowerShell,並用 Get-PSSession cmdlet 在 Srv1 電腦上取得 ITTask 會話。 他使用技術人員的證件來存取該會話。
接著,管理者使用 Connect-PSSession cmdlet 連接到 Srv1 電腦的 ITTask 會話。 指令會將工作階段儲存在變數中 $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 毫秒)的閒置逾時。 指令會將 session option 物件儲存在變數中 $Timeout 。
第二個指令使用 New-PSSession cmdlet 在 Server01 電腦上建立 ITTask 會話。 指令在變 $s 數中儲存會話。
SessionOption 參數的值是變數中的 $Timeout 48 小時閒置逾時。
第三個指令會斷 ITTask 開變數中的 $s 會話。 指令失敗是因為會話的閒置逾時值超過會話設定中的 MaxIdleTimeoutMs 配額。 由於閒置逾時直到會話斷線才會被使用,因此在使用時此違規可能未被偵測到。
第四個指令使用 Invoke-Command cmdlet,執行 Get-PSSessionConfiguration 指令,執行 Server01 電腦上的 Microsoft.PowerShell 會話設定。 指令使用 Format-List cmdlet 來以清單顯示會話設定的所有屬性。輸出顯示 MaxIdleTimeoutMs 屬性(設定使用 session 配置時最大允許的 IdleTimeOut 值)為 43200000 毫秒(12 小時)。
第五個指令取得該會話選項的變數值 $s 。 許多會話選項的值是會話 Runspace 屬性中 ConnectionInfo 屬性的屬性。輸出顯示該會話的 IdleTimeout 屬性值為172800000毫秒(48 小時),這違反了會話設定中 MaxIdleTimeoutMs 的 12 小時配額。為了解決此衝突,您可以使用 ConfigurationName 參數選擇不同的會話設定,或使用 IdleTimeout 參數來減少會話的閒置逾時。
第六個指令會斷開會話。 它使用 IdleTimeoutSec 參數將閒置逾時設定為最大 12 小時。
第七個指令取得已斷線會話的 IdleTimeout 屬性值,單位為毫秒。 輸出結果確認指令成功。
參數
-Confirm
在執行 Cmdlet 之前,提示您進行確認。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | False |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | 參見 |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Id
與指定會話 ID 的會話斷開連線。 輸入一個或多個識別碼(以逗號分隔),或使用範圍運算子(..)來指定一個 ID 範圍。
要取得會話的 ID,請使用 Get-PSSession cmdlet。 實例 ID 會儲存在會話的 Id 屬性中。
參數屬性
| 類型: | Int32[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
Id
| Position: | 1 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-IdleTimeoutSec
改變已斷線 PSSession 的閒置逾時值。 輸入數值,只需幾秒。 最小值為 60 (1 分鐘)。
閒置逾時決定了遠端電腦上斷線的 PSSession 維持多久。 當逾時結束時, PSSession 會被刪除。
斷線的 PSSession 從斷線的那一刻起即被視為閒置,即使指令正在斷線會話中執行。
會話閒置逾時的預設值由會話設定的 IdleTimeoutMs 屬性值決定。 預設值為 7200000 毫秒(2 小時)。
此參數的值優先於偏好變數的 $PSSessionOptionIdleTimeout 屬性及會話設定中預設的閒置逾時值。 然而,此值不得超過會話配置中 MaxIdleTimeoutMs 屬性的值。
MaxIdleTimeoutMs 的預設值為 12 小時(43200000毫秒)。
參數屬性
| 類型: | Int32 |
| 預設值: | 60 |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-InstanceId
與指定實例 ID 的會話斷開連結。
實例 ID 是一個 GUID,唯一識別本地或遠端電腦上的會話。 實例 ID 是唯一的,即使是在多台電腦上的多個會話中也是如此。
要取得會話的實例 ID,請使用 Get-PSSession cmdlet。 實例 ID 會儲存在會話的 InstanceId 屬性中。
參數屬性
| 類型: | Guid[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
InstanceId
| Position: | Named |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-Name
會斷開與指定友善名稱的會話連線。 允許使用通配符。
要取得會話的友善名稱,請使用 Get-PSSession cmdlet。 友誼名稱會儲存在該會話的 Name 屬性中。
參數屬性
| 類型: | String[] |
| 預設值: | None |
| 支援萬用字元: | True |
| 不要顯示: | False |
參數集
Name
| Position: | Named |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-OutputBufferingMode
決定當輸出緩衝區滿時,斷開連線會話中指令輸出的管理方式。 預設值為 Block。
如果斷線會話中的指令回傳輸出且輸出緩衝區填滿,該參數的值實際上決定了該指令在會話斷線時是否繼續執行。 值 Block 為 會暫停指令,直到會話重新連接。 值 允許 Drop 指令完成,但資料可能會遺失。 使用該 Drop 值時,將指令輸出重定向到磁碟上的檔案。
有效值為:
-
Block:當輸出緩衝區滿時,執行會暫停直到緩衝區清空。 -
Drop當輸出緩衝區滿時,執行會繼續。 儲存新輸出時,會捨棄最舊的輸出。 -
None:未指定輸出緩衝模式。 會話設定的 OutputBufferingMode 屬性值用於斷線會話。
參數屬性
| 類型: | OutputBufferingMode |
| 預設值: | Block |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Session
與指定的 PSSessions 斷線。 這時會進入 PSSession 物件,例如指令長回傳的物件 New-PSSession 。 你也可以把 PSSession 物件的管道接到 Disconnect-PSSession。
該 Get-PSSession 指令小程式可以取得所有終止於遠端電腦的 PSSessions ,包括已斷線的 PSSessions ,以及連接到其他電腦上其他會話的 PSSessions 。
Disconnect-PSSession 只斷開與當前會話相連的 PSSession 。 如果你把其他 PSSession 傳到 Disconnect-PSSession,指令 Disconnect-PSSession 就會失敗。
參數屬性
| 類型: | |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
Session
| Position: | 1 |
| 必要: | True |
| 來自管線的值: | True |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-ThrottleLimit
設定指令的 Disconnect-PSSession 油門限制。
油門限制是指可建立的最大並行連線數以執行此指令。 若省略此參數或輸入 的 0值,則使用預設值 32。
節流限制僅適用於目前的命令,不適用於會話或計算機。
參數屬性
| 類型: | Int32 |
| 預設值: | 32 |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-WhatIf
顯示 Cmdlet 執行時會發生什麼事。 指令未執行。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | False |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | 威斯康辛 |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
CommonParameters
此 cmdlet 支援常見參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters。
輸入
PSSession
你可以把一個會話傳到這個 cmdlet。
輸出
PSSession
此指令子回傳一個代表其斷開連線的會話物件。
備註
PowerShell 包含下列 Disconnect-PSSession的別名:
- 窗戶:
dnsn
此 Cmdlet 僅適用於 Windows 平臺。
Disconnect-PSSession該指令小程式僅在本地及遠端電腦運行 PowerShell 3.0 或更新版本時有效。如果你在斷開連線的會話中使用
Disconnect-PSSessioncmdlet,該指令對會話沒有影響,也不會產生錯誤。已斷開的迴路回環會話,若有互動式安全權杖(以 EnableNetworkAccess 參數建立的),只能從建立該會話的電腦重新連接。 此限制保護電腦免受惡意存取。
當你斷開 PSSession 時,會話狀態是 ,
Disconnected可用狀態是 None。State 屬性的值相對於目前的會話。 因此,值
Disconnected表示 PSSession 與當前會話無連結。 然而,這並不代表 PSSession 與所有會議都斷開。 它可能會連線到不同的工作階段。 若要判斷您是否可以連線或重新連線到會話,請使用 Availability 屬性。可用性值表示
None你可以連接到該會話。 值 表示Busy你無法連接到 PSSession ,因為它已經連接到另一個會話。欲了解更多關於會話 狀態 屬性值的資訊,請參閱 RunspaceState Enumeration。
欲了解更多關於會話 可用性屬性值 的資訊,請參閱 RunspaceAvailability 列舉。