Receive-PSSession

取得中斷聯機會話中命令的結果

Syntax

Receive-PSSession
       [-Session] <PSSession>
       [-OutTarget <OutTarget>]
       [-JobName <String>]
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Receive-PSSession
       [-Id] <Int32>
       [-OutTarget <OutTarget>]
       [-JobName <String>]
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Receive-PSSession
       [-ComputerName] <String>
       [-ApplicationName <String>]
       [-ConfigurationName <String>]
       -Name <String>
       [-OutTarget <OutTarget>]
       [-JobName <String>]
       [-Credential <PSCredential>]
       [-Authentication <AuthenticationMechanism>]
       [-CertificateThumbprint <String>]
       [-Port <Int32>]
       [-UseSSL]
       [-SessionOption <PSSessionOption>]
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Receive-PSSession
       [-ComputerName] <String>
       [-ApplicationName <String>]
       [-ConfigurationName <String>]
       -InstanceId <Guid>
       [-OutTarget <OutTarget>]
       [-JobName <String>]
       [-Credential <PSCredential>]
       [-Authentication <AuthenticationMechanism>]
       [-CertificateThumbprint <String>]
       [-Port <Int32>]
       [-UseSSL]
       [-SessionOption <PSSessionOption>]
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Receive-PSSession
       [-ConfigurationName <String>]
       [-ConnectionUri] <Uri>
       [-AllowRedirection]
       -Name <String>
       [-OutTarget <OutTarget>]
       [-JobName <String>]
       [-Credential <PSCredential>]
       [-Authentication <AuthenticationMechanism>]
       [-CertificateThumbprint <String>]
       [-SessionOption <PSSessionOption>]
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Receive-PSSession
       [-ConfigurationName <String>]
       [-ConnectionUri] <Uri>
       [-AllowRedirection]
       -InstanceId <Guid>
       [-OutTarget <OutTarget>]
       [-JobName <String>]
       [-Credential <PSCredential>]
       [-Authentication <AuthenticationMechanism>]
       [-CertificateThumbprint <String>]
       [-SessionOption <PSSessionOption>]
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Receive-PSSession
       -InstanceId <Guid>
       [-OutTarget <OutTarget>]
       [-JobName <String>]
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Receive-PSSession
       -Name <String>
       [-OutTarget <OutTarget>]
       [-JobName <String>]
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]

Description

此 Cmdlet 僅適用於 Windows 平臺。

Cmdlet Receive-PSSession 會取得在已中斷連線之 PowerShell 會話 (PSSession) 中執行的命令結果。 如果會話目前已連線, Receive-PSSession 取得會話中斷連線時正在執行的命令結果。 如果會話仍然中斷連線, Receive-PSSession 請連線到會話、繼續暫停的任何命令,並取得在會話中執行的命令結果。

此 Cmdlet 已在 PowerShell 3.0 中引進。

除了 或 之外,您也可以使用 Receive-PSSession ,而不是 Connect-PSSession 命令。 Receive-PSSession 可以連線到在其他會話或其他計算機上啟動的任何已中斷連線或重新連線的會話。

Receive-PSSession適用於使用 Cmdlet 或 InDisconnectedSession 參數刻意中斷連線的 Invoke-CommandPSSessionDisconnect-PSSession 或無意間中斷網路中斷。

如果您使用 Receive-PSSession Cmdlet 連線到沒有執行或暫停命令的工作階段, Receive-PSSession 請連線到作業階段,但不會傳回任何輸出或錯誤。

如需中斷聯機會話功能的詳細資訊,請參閱 about_Remote_Disconnected_Sessions

某些範例會使用噴濺來減少線條長度,並改善可讀性。 如需詳細資訊,請參閱 about_Splatting

範例

範例 1:連線 PSSession

這個範例會連線到遠端電腦上的會話,並取得在會話中執行的命令結果。

Receive-PSSession -ComputerName Server01 -Name ITTask

Receive-PSSession指定具有 ComputerName 參數的遠端電腦。 Name 參數會識別 Server01 電腦上的 ITTask 工作階段。 此範例會取得在ITTask會話中執行的命令結果。

因為命令不使用 OutTarget 參數,因此結果會出現在命令行上。

範例 2:取得已中斷聯機會話上所有命令的結果

這個範例會取得兩部遠端計算機上所有中斷聯機會話中執行的所有命令結果。

如果任何工作階段未中斷連線或未執行命令, Receive-PSSession 則不會連線到會話,也不會傳回任何輸出或錯誤。

Get-PSSession -ComputerName Server01, Server02 | Receive-PSSession

Get-PSSession會使用 ComputerName 參數來指定遠端電腦。 物件會從管線向下傳送至 Receive-PSSession

範例 3:取得在會話中執行的腳本結果

此範例會 Receive-PSSession 使用 Cmdlet 來取得在遠端電腦會話中執行的腳本結果。

$parms = @{
  ComputerName = "Server01"
  Name = "ITTask"
  OutTarget = "Job"
  JobName = "ITTaskJob01"
  Credential = "Domain01\Admin01"
}
Receive-PSSession @parms

Id     Name            State         HasMoreData     Location
--     ----            -----         -----------     --------
16     ITTaskJob01     Running       True            Server01

此命令會使用 ComputerNameName 參數來識別已中斷連線的作業階段。 它會使用 OutTarget 參數搭配 Job 值來直接 Receive-PSSession 傳回結果做為作業。 JobName 參數會指定重新聯機會話中作業的名稱。 Credential 參數Receive-PSSession會使用網域管理員的許可權來執行命令。

輸出會顯示在目前會話中以 Receive-PSSession 作業的形式傳回結果。 若要取得作業結果,請使用 Receive-Job 命令

範例 4:在網路中斷后取得結果

此範例會 Receive-PSSession 使用 Cmdlet 在網路中斷中斷會話連線之後取得作業的結果。 PowerShell 會在接下來四分鐘內自動嘗試每秒重新聯機會話一次,且只有在四分鐘間隔中的所有嘗試都失敗時,才會放棄工作。

PS> $s = New-PSSession -ComputerName Server01 -Name AD -ConfigurationName ADEndpoint
PS> $s

Id  Name   ComputerName    State        ConfigurationName     Availability
--  ----   ------------    -----        -----------------     ------------
8   AD      Server01       Opened       ADEndpoint               Available


PS> Invoke-Command -Session $s -FilePath \\Server12\Scripts\SharedScripts\New-ADResolve.ps1

Running "New-ADResolve.ps1"

# Network outage
# Restart local computer
# Network access is not re-established within 4 minutes


PS> Get-PSSession -ComputerName Server01

Id  Name   ComputerName    State          ConfigurationName      Availability
--  ----   ------------    -----          -----------------      ------------
1  Backup  Server01        Disconnected   Microsoft.PowerShell           None
8  AD      Server01        Disconnected   ADEndpoint                     None


PS> Receive-PSSession -ComputerName Server01 -Name AD -OutTarget Job -JobName AD

Job Id   Name      State         HasMoreData     Location
--       ----      -----         -----------     --------
16       ADJob     Running       True            Server01


PS> Get-PSSession -ComputerName Server01

Id  Name    ComputerName    State         ConfigurationName     Availability
--  ----    ------------    -----         -----------------     ------------
1  Backup   Server01        Disconnected  Microsoft.PowerShell          Busy
8  AD       Server01        Opened        ADEndpoint               Available

Cmdlet New-PSSession 會在 Server01 計算機上建立會話,並將會話儲存在變數中 $s$s變數會顯示 [狀態] 為 [已開啟],而 [可用性] 為 [可用]。 這些值表示您已連線到會話,而且可以在會話中執行命令。

Cmdlet 會在 Invoke-Command 變數的 $s 會話中執行腳本。 腳本會開始執行並傳回數據,但發生網路中斷會中斷會話。 用戶必須結束會話,然後重新啟動本機計算機。

當電腦重新啟動時,用戶會啟動PowerShell,並執行 Get-PSSession 命令以取得Server01電腦上的會話。 輸出顯示 AD 工作階段仍然存在於 Server01 計算機上。 State 表示 AD 工作階段已中斷連線。 [ 無] 的可用性 值表示會話未連線到任何用戶端會話。

Cmdlet 會Receive-PSSession重新連線到 AD 工作話,並取得在工作階段中執行的腳本結果。 命令會 使用 OutTarget 參數來要求名為 ADJob 的作業結果。 此命令會傳回作業物件,而輸出表示腳本仍在執行中。

Cmdlet Get-PSSession 可用來檢查作業狀態。 輸出會確認 Receive-PSSession Cmdlet 已重新連線到 AD 工作階段,現在已開啟並可供命令使用。 而且,腳本會繼續執行,並取得腳本結果。

範例 5:重新連線到已中斷連線的會話

此範例會 Receive-PSSession 使用 Cmdlet 重新連線到刻意中斷連線的會話,並取得會話中執行之作業的結果。

PS> $parms = @{
      InDisconnectedSession = $True
      ComputerName = "Server01", "Server02", "Server30"
      FilePath = "\\Server12\Scripts\SharedScripts\Get-BugStatus.ps1"
      Name = "BugStatus"
      SessionOption = @{IdleTimeout = 86400000}
      ConfigurationName = "ITTasks"
    }
PS> Invoke-Command @parms
PS> Exit


PS> $s = Get-PSSession -ComputerName Server01, Server02, Server30 -Name BugStatus
PS> $s

Id  Name   ComputerName    State         ConfigurationName     Availability
--  ----   ------------    -----         -----------------     ------------
1  ITTask  Server01        Disconnected  ITTasks                       None
8  ITTask  Server02        Disconnected  ITTasks                       None
2  ITTask  Server30        Disconnected  ITTasks                       None


PS> $Results = Receive-PSSession -Session $s
PS> $s

Id  Name   ComputerName    State         ConfigurationName     Availability
--  ----   ------------    -----         -----------------     ------------
1  ITTask  Server01        Opened        ITTasks                  Available
8  ITTask  Server02        Opened        ITTasks                  Available
2  ITTask  Server30        Opened        ITTasks                  Available


PS> $Results

Bug Report - Domain 01
----------------------
ComputerName          BugCount          LastUpdated
--------------        ---------         ------------
Server01              121               Friday, December 30, 2011 5:03:34 PM

Cmdlet 會在 Invoke-Command 三部遠端電腦上執行腳本。 因為腳本會收集並摘要來自多個資料庫的數據,所以腳本通常需要較長的時間才能完成。 此命令會使用 InDisconnectedSession 參數來啟動腳本,然後立即中斷會話的連線。 SessionOption 參數會擴充已中斷聯機會話的 IdleTimeout 值。 中斷聯機的會話會從中斷連線的那一刻起被視為閑置。 請務必設定閑置逾時足夠長的時間,讓命令可以完成,而且您可以重新連線到會話。 您只能在建立 PSSession 時設定 IdleTimeout,而且只有在中斷連線時才會變更它。 當您連線到 PSSession 或接收其結果時,您無法變更 IdleTimeout 值。 執行命令之後,用戶會結束PowerShell並關閉電腦。

第二天,用戶會繼續 Windows、啟動 PowerShell,並使用 Get-PSSession 來取得腳本執行所在的會話。 命令會依計算機名稱、會話名稱和會話組態的名稱來識別會話,並將會話儲存在變數中 $s 。 變數的值 $s 隨即顯示,並顯示會話已中斷連線,但不忙碌。

Cmdlet Receive-PSSession 會連線到變數中的 $s 會話,並取得其結果。 命令會將結果儲存在變數中 $Results 。 變數 $s 隨即顯示,並顯示會話已連線並可供命令使用。

腳本結果 $Results 變數會顯示在PowerShell控制台中。 如果有任何結果未預期,用戶可以在會話中執行命令來調查根本原因。

範例 6:在中斷連線的會話中執行作業

此範例示範在中斷聯機會話中執行的作業會發生什麼事。

PS> $s = New-PSSession -ComputerName Server01 -Name Test
PS> $j = Invoke-Command -Session $s { 1..1500 | Foreach-Object {"Return $_"; sleep 30}} -AsJob
PS> $j

Id     Name           State         HasMoreData     Location
--     ----           -----         -----------     --------
16     Job1           Running       True            Server01


PS> $s | Disconnect-PSSession

Id Name   ComputerName    State         ConfigurationName     Availability
-- ----   ------------    -----         -----------------     ------------
1  Test   Server01        Disconnected  Microsoft.PowerShell          None


PS> $j

Id     Name           State         HasMoreData     Location
--     ----           -----         -----------     --------
16     Job1           Disconnected  True            Server01


PS> Receive-Job $j -Keep

Return 1
Return 2


PS> $s2 = Connect-PSSession -ComputerName Server01 -Name Test
PS> $j2 = Receive-PSSession -ComputerName Server01 -Name Test
PS> Receive-Job $j

Return 3
Return 4

Cmdlet New-PSSession 會在 Server01 計算機上建立測試工作階段。 命令會將會話儲存在變數中 $s

Cmdlet 會在 Invoke-Command 變數的 $s 會話中執行命令。 此命令會使用 AsJob 參數,以作業的形式執行命令,並在目前工作階段中建立作業物件。 此命令會傳回儲存在變數中的 $j 作業物件。 $j變數會顯示作業物件。

變數中的 $s 會話物件會向下傳送至 管線, Disconnect-PSSession 且會話已中斷聯機。

變數 $j 隨即顯示,並顯示中斷變數中 $j 作業對象中斷連接的效果。 作業狀態現在已中斷連線。

會在 Receive-Job 變數中的 $j 作業上執行 。 輸出顯示作業在會話之前開始傳回輸出,且作業已中斷連線。

Cmdlet Connect-PSSession 會在相同的用戶端會話中執行。 命令會重新連線到 Server01 計算機上的測試工作階段,並將會話儲存在變數中 $s2

Cmdlet Receive-PSSession 會取得會話中執行之作業的結果。 因為命令是在相同的會話中執行, Receive-PSSession 因此預設會以作業的形式傳回結果,並重複使用相同的作業物件。 命令會將作業儲存在變數中 $j2 。 Cmdlet Receive-Job 會取得變數中 $j 作業的結果。

參數

-AllowRedirection

指出此 Cmdlet 允許將此連線重新導向至替代的統一資源識別碼 (URI)。

當您使用 連線 ionURI 參數時,遠端目的地可以傳回指示以重新導向至不同的 URI。 根據預設,PowerShell 不會重新導向連線,但您可以使用此參數來重新導向連線。

您也可以變更 Maximum 連線 ionRedirectionCount 會話選項值,以限制重新導向連線的次數。 使用 Cmdlet 的 New-PSSessionOption MaximumRedirection 參數,或設定喜好設定變數的 $PSSessionOption Maximum 連線 ionRedirectionCount 屬性。 預設值是 5。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ApplicationName

指定應用程式。 此 Cmdlet 只會連線到使用指定應用程式的作業階段。

輸入連線 URI 的應用程式名稱區段。 例如,在下列連線 URI 中,WSMan 是應用程式名稱: http://localhost:5985/WSMAN

工作階段的應用程式名稱會儲存在 Runspace.連線會話的 ionInfo.AppName 屬性。

參數的值是用來選取和篩選會話。 它不會變更會話所使用的應用程式。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Authentication

指定用來驗證命令中使用者認證的機制,以重新連線到已中斷連線的會話。 此參數可接受的值為:

  • 預設
  • 基本
  • Credssp
  • Digest
  • Kerberos
  • 交涉
  • NegotiateWithImplicitCredential

預設值為 Default。

如需此參數值的詳細資訊,請參閱 AuthenticationMechanism 列舉

警告

認證安全性支援提供者 (CredSSP) 驗證,其中使用者認證會傳遞至要驗證的遠端電腦,是針對需要驗證多個資源的命令所設計,例如存取遠端網路共用。 此機制會增加遠端作業的安全性風險。 如果遠端電腦遭到入侵,傳遞給它的認證可用來控制網路會話。

Type:AuthenticationMechanism
Accepted values:Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos
Position:Named
Default value:Default
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CertificateThumbprint

指定具有連線到已中斷聯機會話之用戶帳戶的數位公鑰憑證 (X509)。 輸入憑證的憑證指紋。

憑證將用於用戶端憑證式驗證。 憑證只能對應至本機用戶帳戶,且不適用於網域帳戶。

若要取得憑證指紋,請使用 Get-Item PowerShell Cert: 磁碟驅動器中的或 Get-ChildItem 命令。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ComputerName

指定已中斷聯機會話儲存所在的計算機。 工作階段會儲存在位於伺服器端或接收連接端的電腦上。 預設是本機電腦。

輸入一部計算機的 NetBIOS 名稱、IP 位址或完整功能變數名稱 (FQDN)。 不允許通配符。 若要指定本機計算機,請輸入計算機名稱、點(.)、 $env:COMPUTERNAME或localhost。

Type:String
Aliases:Cn
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-ConfigurationName

指定工作階段組態的名稱。 此 Cmdlet 只會連線到使用指定工作階段設定的工作階段。

輸入工作階段組態的組態名稱或完整資源URI。 如果您只指定組態名稱,則前面會加上下列架構 URI:

http://schemas.microsoft.com/powershell.

會話的組態名稱會儲存在 會話的 ConfigurationName 屬性中。

參數的值是用來選取和篩選會話。 它不會變更會話所使用的會話組態。

如需工作階段設定的詳細資訊,請參閱 about_Session_Configurations

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Confirm

執行 Cmdlet 之前先提示您確認。

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ConnectionUri

指定 URI,定義用來重新連線到已中斷聯機會話的連接端點。

URI 必須完整。 字串格式如下所示:

<Transport>://<ComputerName>:<Port>/<ApplicationName>

預設值如下:

http://localhost:5985/WSMAN

如果您未指定連線 URI,您可以使用 UseSSLComputerNamePortApplicationName 參數來指定連線 URI 值。

URI 傳輸區段的有效值為 HTTP 和 HTTPS。 如果您使用傳輸區段指定連線 URI,但未指定埠,則會使用標準埠建立會話:80 代表 HTTP,而 HTTPS 則為 443。 若要使用PowerShell遠端的預設埠,請針對 HTTP 指定埠 5985,或針對 HTTPS 指定埠 5986。

如果目的地計算機將連線重新導向至不同的 URI,除非您在命令中使用 AllowRedirection 參數,否則 PowerShell 會防止重新導向。

Type:Uri
Aliases:URI, CU
Position:0
Default value:http://localhost:5985/WSMAN
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Credential

指定有權連線到已中斷聯機會話的用戶帳戶。 預設為目前使用者。

輸入用戶名稱,例如User01或Domain01\User01,或輸入 Cmdlet 所產生的 Get-Credential PSCredential 物件。 如果您輸入使用者名稱,系統會提示您輸入密碼。

認證會儲存在 PSCredential 物件中,密碼會儲存為 SecureString

注意

如需 SecureString 數據保護的詳細資訊,請參閱 SecureString 有多安全?

Type:PSCredential
Position:Named
Default value:Current user
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Id

指定已中斷連線之會話的標識碼。 只有在 先前已中斷連線的會話已連線到目前會話時,Id 參數才有效。

當會話儲存在本機計算機上,但未連線到目前的會話時,此參數有效但無效。

Type:Int32
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-InstanceId

指定已中斷連線之會話的實例標識碼。 實例標識碼是 GUID,可唯一 識別本機或遠端電腦上的 PSSession 。 實例標識碼會儲存在 PSSessionInstanceID 屬性中。

Type:Guid
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-JobName

指定傳回之作業 Receive-PSSession 的易記名稱。

Receive-PSSession當 OutTarget 參數的值是 Job,或在中斷連線的會話中執行的作業是在目前工作階段中啟動時,會傳回作業。

如果在目前會話中啟動在中斷聯機會話中執行的作業,PowerShell 會重複使用會話中的原始作業物件,並忽略 JobName 參數的值

如果在中斷連線的會話中執行的作業在不同的會話中啟動,PowerShell 會建立新的作業物件。 它會使用預設名稱,但您可以使用此參數來變更名稱。

如果 OutTarget 參數的預設值或明確值不是 Job,命令會成功,但 JobName 參數沒有作用。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Name

指定已中斷連線之會話的易記名稱。

Type:String
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-OutTarget

決定如何傳回會話結果。 此參數可接受的值為:

  • 作業。 以異步方式傳回作業物件中的結果。 您可以使用 JobName 參數來指定作業的名稱或新名稱。
  • 主機。 將結果傳回命令行 (同步)。 如果命令正在繼續,或結果是由大量對象所組成,則回應可能會延遲。

OutTarget 參數的預設值為 Host。 如果在目前會話中啟動在中斷聯機會話中收到的命令,OutTarget 參數的預設值就是命令啟動的格式。 如果命令是以作業的形式啟動,則預設會以作業的形式傳回。 否則,預設會傳回主機程式。

通常,主程式會在命令行上顯示傳回的物件,而不會延遲,但這種行為可能會有所不同。

Type:OutTarget
Accepted values:Default, Host, Job
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Port

指定用來重新連線到會話的遠端電腦網路埠。 若要連線到遠端電腦,它必須接聽連線所使用的埠。 默認埠為 5985,這是 HTTP 的 WinRM 連接埠,而 5986 是 HTTPS 的 WinRM 連接埠。

使用替代埠之前,您必須在遠端電腦上設定 WinRM 接聽程式以接聽該埠。 若要設定接聽程式,請在PowerShell提示字元中輸入下列兩個命令:

Remove-Item -Path WSMan:\Localhost\listener\listener* -Recurse

New-Item -Path WSMan:\Localhost\listener -Transport http -Address * -Port \<port-number\>

除非有必要,否則請勿使用 Port 參數。 在命令中設定的埠會套用至命令執行所在的所有計算機或會話。 替代埠設定可能會防止命令在所有計算機上執行。

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Session

指定已中斷連線的工作階段。 輸入包含 PSSession 的變數,或建立或取得 PSSession 的命令,例如 Get-PSSession 命令。

Type:PSSession
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-SessionOption

指定工作階段的進階選項。 輸入 SessionOption 物件,例如您使用 New-PSSessionOption Cmdlet 建立的物件,或索引鍵是會話選項名稱的哈希表,而值是會話選項值。

如果設定選項,選項的 $PSSessionOption 預設值取決於喜好設定變數的值。 否則,預設值是由會話組態中設定的選項所建立。

會話選項值優先於喜好設定變數和會話組態中 $PSSessionOption 設定之會話的預設值。 不過,它們不會優先於會話設定中設定的最大值、配額或限制。

如需包含預設值的工作階段選項描述,請參閱 New-PSSessionOption。 如需$PSSessionOption喜好設定變數的相關信息,請參閱about_Preference_Variables。 如需工作階段設定的詳細資訊,請參閱 about_Session_Configurations

Type:PSSessionOption
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UseSSL

指出此 Cmdlet 會使用安全套接字層 (SSL) 通訊協議來連線到已中斷連線的會話。 根據預設,不會使用 SSL。

WS-Management 會加密透過網路傳輸的所有 PowerShell 內容。 UseSSL 是額外的保護,可跨 HTTPS 連線傳送數據,而不是 HTTP 連線。

如果您在用於命令的埠上使用此參數,且無法使用 SSL,命令會失敗。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

顯示執行 Cmdlet 後會發生的情況。 Cmdlet 未執行。

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

輸入

PSSession

您可以使用管線將會話物件傳送至此 Cmdlet,例如 Cmdlet 所 Get-PSSession 傳回的物件。

Int32

您可以使用管線將會話標識碼傳送至此 Cmdlet。

Guid

您可以使用管線傳送此 Cmdlet 的作業階段實例識別碼。

String

您可以使用管線將會話名稱傳送至此 Cmdlet。

輸出

Job

如果 OutTarget 參數的值或預設值JobReceive-PSSession則會傳回作業物件。

PSObject

此 Cmdlet 會傳回在中斷聯機會話中執行的命令結果,如果有的話。

備註

PowerShell 包含下列的 Receive-PSSession別名:

  • 所有平臺:
    • rcsn

此 Cmdlet 僅適用於 Windows 平臺。

Receive-PSSession 只會從已中斷連線的會話取得結果。 只有連線到或終止於執行 PowerShell 3.0 或更新版本的電腦,才能中斷連線並重新連線。

如果在中斷連線的會話中執行的命令未產生結果,或結果已傳回另一個會話, Receive-PSSession 則不會產生任何輸出。

工作階段的輸出緩衝模式會決定會話中的命令在工作階段中斷連線時如何管理輸出。 當會話的 OutputBufferingMode 選項值為 Drop 且輸出緩衝區已滿時,命令就會開始刪除輸出。 Receive-PSSession 無法復原此輸出。 如需輸出緩衝模式選項的詳細資訊,請參閱New-PSSessionOption和New-PSTransportOption Cmdlet 的說明文章

當您連線到 PSSession 或接收結果時,您無法變更 PSSession閒置逾時值。 的 Receive-PSSession SessionOption 參數會採用具有 IdleTimeout 值的 SessionOption 物件。 不過,當它連接到 PSSession 或接收結果時,會忽略 SessionOption 物件的 IdleTimeout變數的 IdleTimeout$PSSessionOption

  • 當您使用 或 Cmdlet 建立 PSSession 時,以及當您中斷與 PSSession 的連線時,您可以設定和變更 PSSession閒置逾時Invoke-CommandNew-PSSession
  • PSSessionIdleTimeout屬性對於中斷連線的會話至關重要,因為它會決定遠端電腦上維護中斷聯機會話的時間長度。 即使命令是在中斷連線的會話中執行,中斷連線的會話也會被視為閑置。

如果您使用 Cmdlet 的 Invoke-Command AsJob 參數啟動遠端會話中的作業,即使作業是在遠端會話中執行,作業物件還是會在目前的工作階段中建立。 如果您中斷遠端會話的連線,則目前會話中的作業物件會中斷與作業的連線。 作業物件包含傳回給它的任何結果,但不會在中斷連線的會話中收到作業的新結果。

如果不同的用戶端連線到包含執行中作業的會話,則新聯機會話中傳遞至原始作業對象的結果無法在新連線的會話中使用。 只有未傳遞至原始作業對象的結果,才能在重新連線的會話中使用。

同樣地,如果您在會話中啟動腳本,然後中斷與會話的連線,則腳本在中斷連線之前傳遞給會話的任何結果都不適用於連線到會話的另一個用戶端。

若要防止您想要中斷連線之會話中的數據遺失,請使用 Cmdlet 的 Invoke-Command InDisconnectedSession 參數。 因為此參數會防止結果傳回至目前的會話,因此當會話重新連線時,所有結果都可以使用。

您也可以使用 Invoke-Command Cmdlet 在遠端會話中執行 Start-Job 命令,以防止資料遺失。 在此情況下,作業物件會在遠程會話中建立。 您無法使用 Receive-PSSession Cmdlet 來取得作業結果。 請改用 Connect-PSSession Cmdlet 連線到工作階段,然後使用 Invoke-Command Cmdlet 在工作階段中執行 Receive-Job 命令。

當包含執行中作業的會話已中斷連線,然後重新連線時,只有當作業中斷聯機並重新連線至相同會話時,才會重複使用原始作業物件,而要重新連線的命令不會指定新的作業名稱。 如果會話重新連線到不同的用戶端會話或指定新的作業名稱,PowerShell 會為新的會話建立新的作業物件。

當您中斷 PSSession 的連線時,會話狀態為 [已中斷連線],而可用性為 [無]。

  • State 屬性的值相對於目前的會話。 已中斷連線的值表示 PSSession 未連線到目前的會話。 不過,這並不表示 PSSession 已與所有會話中斷連線。 它可能會連線到不同的會話。 若要判斷您是否可以連線或重新連線到會話,請使用 Availability 屬性。
  • [無] 的可用性值表示您可以連線到會話。 [忙碌] 的值表示您無法連線到 PSSession ,因為它已連線到另一個會話。
  • 如需會話之 State 屬性值的詳細資訊,請參閱 RunspaceState
  • 如需會話之 Availability 屬性值的詳細資訊,請參閱 RunspaceAvailability