共用方式為


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

Disconnect-PSSession cmdlet 將 PowerShell 工作階段(“PSSession”)與當前會話(例如使用 New-PSSession cmdlet 啟動的會話)斷開連接。 因此,PSSession 處於斷開連接狀態。 您可以從當前工作階段或本地電腦或其他電腦上的其他工作階段連接到斷開連接的 PSSession。

Disconnect-PSSession cmdlet 僅斷開連接到當前工作階段的打開的 PSSession 的連接。 Disconnect-PSSession 無法斷開斷開或關閉的 PSSession 或使用 cmdlet 啟動的 Enter-PSSession 互動式 PSSession,也無法斷開連接到其他會話的 PSSession。

若要重新連接到斷開連接的 PSSession,請使用 Connect-PSSessionReceive-PSSession cmdlet。

當 PSSession 斷開連接時,PSSession 中的命令將繼續運行,直到它們完成,除非 PSSession 超時或 PSSession 中的命令被完整的輸出緩衝區阻止。 若要變更閑置逾時,請使用 IdleTimeoutSec 參數。 若要變更輸出緩衝模式,請使用 OutputBufferingMode 參數您也可以使用 Cmdlet 的 Invoke-Command 參數,在中斷連線的會話中執行命令。

如需有關斷線會話功能的更多資訊,請參閱 about_Remote_Disconnected_Sessions

此 Cmdlet 是在 Windows PowerShell 3.0 中引進的。

範例

範例 1 - 依名稱中斷會話連線

此命令將斷開 Server01 電腦上的 UpdateSession PSSession 與當前會話的連接。 該命令使用 Name 參數來標識 PSSession。

PS> Disconnect-PSSession -Name UpdateSession
Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
1  UpdateSession   Server01        Disconnected  Microsoft.PowerShell          None

輸出顯示嘗試中斷連線成功。 會話狀態為 Disconnected (已斷開連接) 且 Availability (可用性) 為 None(無),這表示會話不忙,可以重新連接。

範例 2 - 中斷會話與特定電腦的連線

此命令將斷開 Server12 電腦上的 ITTask 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

這一系列命令示範如何在企業案例中使用 Disconnect-PSSession Cmdlet。 在此情況下,新的技術人員會在遠端電腦上的會話中啟動腳本,併發生問題。 技術人員會中斷與會話的連線,讓更有經驗的管理員可以連線到會話並解決問題。

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 參數在 $s 變數的會話中運行腳本。

在 Srv1 電腦上執行的腳本會產生非預期的錯誤。 技術人員聯繫他的經理,並尋求協助。 經理指示技術人員斷開與會話的連接,以便他可以進行調查。第二個命令使用 Get-PSSession cmdlet 獲取 Srv1 電腦上的 ITTask 工作階段,並使用 Disconnect-PSSession cmdlet 斷開工作階段連接。 此命令不會影響其他電腦上的ITTask會話。

第三個命令使用 Get-PSSession cmdlet 獲取 ITTask 工作階段。 輸出顯示 Srv2 和 Srv30 電腦上的 ITTask 工作階段不受斷開連接命令的影響。

經理登錄到他的家庭計算機,連接到他的公司網路,啟動 Windows 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                   : https://schemas.microsoft.com/powershell/microsoft.powershell
MaxConcurrentCommandsPerShell : 1000
UseSharedProcess              : false
ProcessIdleTimeoutSec         : 0
xmlns                         : https://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                           : https://schemas.microsoft.com/powershell/microsoft.powershell
SDKVersion                    : 2
Name                          : microsoft.powershell
XmlRenderingType              : text
Capability                    : {Shell}
RunAsPassword                 :
MaxProcessesPerShell          : 15
ParentResourceUri             : https://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                          : https://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 選項物件保存在 $Timeout 變數中。

第二個命令使用 New-PSSession cmdlet 在 Server01 計算機上創建 ITTask 工作階段。 該命令將會話保存在 $s 變數中。 SessionOption 參數的值是 $Timeout 變數中的 48 小時空閒超時。

第三個命令斷開 $s 變數中的ITTask會話。 命令失敗,因為會話的閑置逾時值超過會話組態中的 MaxIdleTimeoutMs 配額。 由於在會話中斷連線之前不會使用閑置逾時,因此當會話正在使用時,此違規可能會無法偵測到。

第四個命令使用 Invoke-Command cmdlet 在 Server01 計算機上為 Microsoft.PowerShell 會話配置運行 Get-PSSessionConfiguration 命令。 該命令使用 Format-List cmdlet 在清單中顯示工作階段配置的所有屬性。輸出顯示 MaxIdleTimeoutMS 屬性(為使用會話配置的會話確定允許的最大 IdleTimeout 值)為43200000毫秒(12小時)。

第五個命令獲取 $s 變數中會話的 session 選項值。 許多工作階段選項的值是會話的 Runspace 屬性的 ConnectionInfo 屬性的屬性。輸出顯示會話的IdleTimeout屬性的值為172800000毫秒(48小時),這違反了會話配置中12小時的 MaxIdleTimeoutMs 配額。要解決此衝突,您可以使用 ConfigurationName 參數選擇不同的會話配置,或使用 IdleTimeout 參數來減少會話的空閒超時。

第六個命令會中斷會話的連線。 它會使用 IdleTimeoutSec 參數,將閒置逾時設定為 12 小時上限。

第七個命令會取得中斷聯機會話的 IdleTimeout 屬性值,以毫秒為單位。 輸出會確認命令成功。

參數

-Confirm

在執行 Cmdlet 之前,提示您進行確認。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False
別名:cf

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Id

使用指定的會話標識碼中斷與會話的連線。 輸入一或多個標識碼(以逗號分隔),或使用範圍運算符 (..) 來指定標識符的範圍。

若要取得會話的標識符,請使用 Get-PSSession Cmdlet。 實例標識碼會儲存在會話的 標識子 屬性中。

參數屬性

類型:

Int32[]

預設值:None
支援萬用字元:False
不要顯示:False

參數集

Id
Position:1
必要:True
來自管線的值:False
來自管線按屬性名稱的值:True
來自剩餘引數的值:False

-IdleTimeoutSec

更改斷開連接的 PSSession 的空閒超時值。 以秒為單位輸入值。 最小值為 60 (1 分鐘)。

空閒超時確定斷開連接的 PSSession 在遠端電腦上保持多長時間。 超時到期后,將刪除 PSSession。

斷開連接的 PSSession 從斷開連接的那一刻起就被視為空閒,即使命令正在斷開連接的會話中運行也是如此。

會話閑置逾時的預設值是由會話組態的 IdleTimeoutMs 屬性的值所設定。 默認值為 7200000 毫秒(2 小時)。

此參數的值優先於$PSSessionOption首選項變數的 IdleTimeout 屬性的值和會話配置中的預設空閒超時值。 不過,此值不能超過會話組態 屬性 MaxIdleTimeoutMs 的值。 MaxIdleTimeoutMs 的預設值為 12 小時(43200000 毫秒)。

參數屬性

類型:Int32
預設值:60
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-InstanceId

中斷與具有指定實例標識碼之會話的連接。

實例標識碼是 GUID,可唯一識別本機或遠端電腦上的會話。 實例標識碼是唯一的,即使在多部計算機上的多個會話之間也是如此。

若要取得會話的實例標識碼,請使用 Get-PSSession Cmdlet。 實例標識符會儲存在會話的 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 值時,將命令輸出重定向到磁碟上的檔。

有效值為:

  • 區塊:當輸出緩衝區已滿時,執行會暫停,直到緩衝區清除為止。
  • Drop:當輸出緩衝區已滿時,繼續執行。 儲存新輸出時,會捨棄最舊的輸出。
  • None:未指定輸出緩衝模式。 會話組態的 OutputBufferingMode 屬性值會用於中斷連線的會話。

參數屬性

類型:OutputBufferingMode
預設值:Block
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Session

斷開與指定的 PSSessions 的連接。 輸入 PSSession 物件,例如 cmdlet 返回的物件 New-PSSession 。 您還可以將 PSSession 物件通過管道傳輸到 Disconnect-PSSession

Get-PSSession cmdlet 可以獲取在遠端電腦上終止的所有 PSSession,包括斷開連接的 PSSession 和連接到其他電腦上的其他會話的 PSSession。 Disconnect-PSSession 僅斷開連接到當前會話的 PSSession。 如果通過管道將其他 PSSession 傳遞給 Disconnect-PSSession,則 Disconnect-PSSession 命令將失敗。

參數屬性

類型:

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

您可以通過管道將會話傳輸到 Disconnect-PSSession

輸出

PSSession

Disconnect-PSSession 返回一個物件,該物件表示它斷開連接的會話。

備註

  • Disconnect-PSSession Cmdlet 只有在本機和遠端電腦執行 PowerShell 3.0 或更新版本時才能運作。

  • 如果您在中斷連線的會話上使用 Disconnect-PSSession Cmdlet,則命令不會影響會話,而且不會產生錯誤。

  • 使用互動式安全性令牌中斷連線的回送會話(以 EnableNetworkAccess 參數建立的會話,只能從建立會話的計算機重新連線。 這項限制可保護計算機免於惡意存取。

  • 當您中斷 PSSession 連線時,工作階段狀態會 [已中斷連線] 且可用性 [無]

    State 屬性的值相對於目前的會話。 因此,Disconnected 的值表示 PSSession 未連線到目前的會話。 不過,這並不表示 PSSession 與所有會話中斷連線。 它可能會連線到不同的工作階段。 若要判斷您是否可以連線或重新連線到會話,請使用 Availability 屬性。

    AvailabilityNone 表示您可以連線到會話。 Busy 的值表示您無法連線到 PSSession,因為它已連線到另一個會話。

    如需會話 State 屬性值的詳細資訊,請參閱 runspaceState 列舉

    如需會話之 Availability 屬性值的詳細資訊,請參閱 runspaceAvailability 列舉