Receive-PSSession

在斷開連線的會話中取得指令的結果

語法

Session (預設值)

Receive-PSSession
    [-Session] <PSSession>
    [-OutTarget <OutTarget>]
    [-JobName <String>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

Id

Receive-PSSession
    [-Id] <Int32>
    [-OutTarget <OutTarget>]
    [-JobName <String>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

ComputerSessionName

Receive-PSSession
    [-ComputerName] <String>
    -Name <String>
    [-ApplicationName <String>]
    [-ConfigurationName <String>]
    [-OutTarget <OutTarget>]
    [-JobName <String>]
    [-Credential <PSCredential>]
    [-Authentication <AuthenticationMechanism>]
    [-CertificateThumbprint <String>]
    [-Port <Int32>]
    [-UseSSL]
    [-SessionOption <PSSessionOption>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

ComputerInstanceId

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

ConnectionUriSessionName

Receive-PSSession
    [-ConnectionUri] <Uri>
    -Name <String>
    [-ConfigurationName <String>]
    [-AllowRedirection]
    [-OutTarget <OutTarget>]
    [-JobName <String>]
    [-Credential <PSCredential>]
    [-Authentication <AuthenticationMechanism>]
    [-CertificateThumbprint <String>]
    [-SessionOption <PSSessionOption>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

ConnectionUriInstanceId

Receive-PSSession
    [-ConnectionUri] <Uri>
    -InstanceId <Guid>
    [-ConfigurationName <String>]
    [-AllowRedirection]
    [-OutTarget <OutTarget>]
    [-JobName <String>]
    [-Credential <PSCredential>]
    [-Authentication <AuthenticationMechanism>]
    [-CertificateThumbprint <String>]
    [-SessionOption <PSSessionOption>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

InstanceId

Receive-PSSession
    -InstanceId <Guid>
    [-OutTarget <OutTarget>]
    [-JobName <String>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

SessionName

Receive-PSSession
    -Name <String>
    [-OutTarget <OutTarget>]
    [-JobName <String>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

Description

此 Cmdlet 只能在 Windows 平臺上使用。

指令 Receive-PSSession 小程式會取得在 PowerShell 會話(PSSession)中被斷開的指令結果。 如果會話目前連線中, Receive-PSSession 會取得斷線時執行的指令結果。 如果會話仍然斷線,請 Receive-PSSession 連接會話,恢復暫停的指令,並取得會話中執行的指令結果。

此 Cmdlet 已在 PowerShell 3.0 中引進。

你可以在指令之外使用輔助 Receive-PSSession 或替代 Connect-PSSession 指令。 Receive-PSSession 可以連接到任何已在其他會話或其他電腦上啟動的斷線或重新連線的會話。

Receive-PSSession可處理的是使用 cmdlet 或 Disconnect-PSSessionInvoke-Command 參數故意斷開的 PSSessions。 或者因為網路中斷而無意中斷線。

如果你用 Receive-PSSession cmdlet 連接到一個沒有執行或暫停指令的 session,會 Receive-PSSession 連接到該 session,但不會回傳任何輸出或錯誤。

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

有些例子是利用 splatting 來縮短行長並提升可讀性。 如需詳細資訊,請參閱 about_Splatting。

範例

範例 1:連接 PSSession

此範例連接遠端電腦的會話,並取得會話中執行指令的結果。

Receive-PSSession -ComputerName Server01 -Name ITTask

以 Receive-PSSessionComputerName 參數指定遠端電腦。 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

指令使用 ComputerName 和 Name 參數來識別已斷線的會話。 它使用 OutTarget 參數,Job 值為 Job 來指示 Receive-PSSession 結果作為工作回傳。 JobName 參數指定重新連線會話中工作名稱。 憑證參數會依據網域管理員的權限執行該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

New-PSSession該 cmdlet 會在 Server01 電腦上建立一個會話,並將該會話儲存在變$s數中。 $s變數顯示狀態已開啟,可用性為可用。 這些值表示你已連接到該會話,並且可以在會話中執行指令。

Invoke-Command指令小程式會在會話中執行一個腳本,並用變$s數。 腳本開始執行並回傳資料,但發生網路中斷導致工作階段中斷。 使用者必須退出會話並重新啟動本地電腦。

當電腦重新啟動時,使用者會啟動 PowerShell,並執行 Get-PSSession 指令在 Server01 電腦上取得會話。 輸出顯示 AD 會話仍在 Server01 電腦上運作。 狀態表示AD 會話已斷線。 可用性 值為 None,表示該會話未連接到任何用戶端會話。

指令 Receive-PSSession 檔會重新連接 AD 會話,並取得該會話中執行的腳本結果。 指令使用 OutTarget 參數在名為 ADJob 的工作中請求結果。 指令會回傳一個工作物件,輸出則表示腳本仍在執行中。

Get-PSSession指令長用來檢查工作狀態。 輸出確認 cmdlet 已 Receive-PSSession 重新連接至 AD 會話,該會話現在已開啟並可用於指令。 腳本恢復執行並取得相應結果。

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

這個範例使用 Receive-PSSession 指令碼來重新連接那些刻意斷線的會話,並取得該會話中正在執行的作業結果。

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

該 Invoke-Command 指令小程式會在三台遠端電腦上執行腳本。 由於腳本會從多個資料庫收集並彙整資料,通常完成時間較長。 指令使用 InDisconnectedSession 參數,啟動腳本後立即斷開會話。 SessionOption 參數會擴展已斷線會話的 IdleTimeout 值。 斷線的會話從斷線的那一刻起就被視為閒置。 設定閒置逾時足夠長的時間很重要,這樣指令才能完成,你才能重新連接工作階段。 你只能在建立 PSSession 時設定 IdleTimeout,並且只有在斷線時才會更改。 當你連接 PSSession 或收到結果時,無法更改 IdleTimeout 的值。 執行該指令後,使用者退出 PowerShell 並關閉電腦。

隔天,使用者恢復Windows,啟動 PowerShell,並使用 Get-PSSession 取得腳本執行的會話。 指令透過電腦名稱、會話名稱及會話設定名稱來識別會話,並將會話儲存在變數中 $s 。 $s變數值會顯示出來,顯示會話已斷線,但並不忙碌。

Receive-PSSession指令檔會連接到變數中的$s會話並取得結果。 指令會將結果儲存在變數中 $Results 。 $s變數會顯示出來,顯示會話已連接且可用於指令。

變數中的 $Results 腳本結果會顯示在 PowerShell 主控台中。 若結果出乎意料,使用者可在會話中執行指令以調查根本原因。

範例 6:在斷開連線的 session 中執行工作

這個例子展示了一個在不連連線會話中執行的工作會發生什麼事。

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

New-PSSession該 cmdlet 會在 Server01 電腦上建立測試會話。 指令會將工作階段儲存在變數中 $s 。

cmdlet 在 Invoke-Command 變數的會話 $s 中執行指令。 指令使用 AsJob 參數將指令當作工作執行,並在目前會話中建立工作物件。 指令會回傳一個工作物件,該物件被儲存在變 $j 數中。 變 $j 數顯示工作物件。

變數中的 $s 會話物件會被送入管線 Disconnect-PSSession ,然後會話被斷開。

$j變數會顯示並顯示斷開該工作物件$j的效果。 工作狀態現在已斷線。

在 Receive-Job 工作 $j 中以變數執行。 輸出顯示工作在會話與工作斷線前就開始回傳輸出。

Connect-PSSession指令長會在同一個客戶端會話中執行。 指令會重新連接 Server01 電腦上的測試會話,並將會話儲存在變數中 $s2 。

指令 Receive-PSSession 長會取得該工作在會話中執行的結果。 因為指令在同一個會話中執行,預設 Receive-PSSession 會以工作回傳結果,並重複使用同一個工作物件。 命令會將作業儲存在 $j2 變數中。 指令小程式會 Receive-Job 取得變數中 $j 工作的結果。

參數

-AllowRedirection

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

當您使用 ConnectionURI 參數時,遠端目的地可以傳回指示以重新導向至不同的 URI。 預設情況下,PowerShell 不會重新導向連線,但你可以用這個參數來啟用它重新導向連線。

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

參數屬性

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

參數集

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

-ApplicationName

指定一個應用程式。 此指令只連接使用指定應用程式的會話。

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

會話的應用程式名稱會儲存在該會話的 Runspace.ConnectionInfo.AppName 屬性中。

參數的值用於選擇與篩選會話。 它不會改變該會話所使用的應用程式。

參數屬性

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

參數集

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

-Authentication

指定用來驗證使用者憑證的機制,並指示重新連接已斷連線的會話。 此參數可接受的值為:

  • Default
  • 基本
  • Credssp
  • 摘要
  • Kerberos
  • 談判
  • 使用隱式憑證進行協商

預設值為 Default。

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

Caution

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

參數屬性

類型:AuthenticationMechanism
預設值:Default
接受的值:Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos
支援萬用字元:False
不要顯示:False

參數集

ComputerInstanceId
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
ComputerSessionName
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
ConnectionUriSessionName
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
ConnectionUriInstanceId
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-CertificateThumbprint

指定具有權限將斷線會話重新連線之用戶帳戶的數位公鑰憑證(X509)。 輸入憑證的指紋。

憑證用於客戶端憑證型驗證。 憑證只能映射到本地使用者帳號,無法與網域帳號相容。

要取得憑證的指紋,請在 PowerShell Get-Item 磁碟機中使用 a Get-ChildItem 或 Cert: 指令。

參數屬性

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

參數集

ComputerInstanceId
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
ComputerSessionName
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
ConnectionUriSessionName
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
ConnectionUriInstanceId
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-ComputerName

指定該斷線會話儲存在哪台電腦上。 會話會儲存在伺服器端的電腦上,也就是連線的接收端。 預設值為本機電腦。

輸入 NetBIOS 名稱、IP 位址,或是某台電腦的完整限定網域名稱(FQDN)。 不允許使用通配符字元。 要指定本地電腦,請輸入電腦名稱、點()、.$Env:COMPUTERNAME或 localhost。

參數屬性

類型:String
預設值:None
支援萬用字元:False
不要顯示:False
別名:Cn

參數集

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

-ConfigurationName

指定會話配置的名稱。 此指令檔僅連接使用指定會話設定的會話。

輸入工作階段組態的組態名稱或完整限定資源URI。 若僅指定組態名稱,則前方會加上以下結構 URI:

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

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

參數的值用於選擇與篩選會話。 它不會改變該工作階段所使用的會話設定。

如需工作階段組態的詳細資訊,請參閱 about_Session_Configurations。

參數屬性

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

參數集

ComputerInstanceId
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:True
來自剩餘引數的值:False
ComputerSessionName
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:True
來自剩餘引數的值:False
ConnectionUriSessionName
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:True
來自剩餘引數的值:False
ConnectionUriInstanceId
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:True
來自剩餘引數的值:False

-Confirm

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

參數屬性

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

參數集

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

-ConnectionUri

指定一個 URI,定義用於重新連接斷線會話的連線端點。

URI 必須完整限定。 字串的格式如下:

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

預設值如下:

http://localhost:5985/WSMAN

如果你沒有指定連線 URI,可以使用 UseSSL、ComputerName、Port 和 ApplicationName 參數來指定連線 URI 值。

URI 傳輸 區段的有效值為 HTTP 和 HTTPS。 如果你指定一個連接 URI 並搭配傳輸區段,但沒有指定埠口,該會話會用標準埠建立:HTTP 埠為 80,HTTPS 埠為 443。 若要使用 PowerShell 遠端的預設埠,請對於 HTTP 指定埠 5985,或對於 HTTPS 指定埠 5986。

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

參數屬性

類型:Uri
預設值:http://localhost:5985/WSMAN
支援萬用字元:False
不要顯示:False
別名:URI, CU

參數集

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

-Credential

指定一個有權限連接到已斷線會話的使用者帳號。 預設值為目前的使用者。

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

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

Note

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

參數屬性

類型:PSCredential
預設值:Current user
支援萬用字元:False
不要顯示:False

參數集

ComputerInstanceId
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
ComputerSessionName
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
ConnectionUriSessionName
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
ConnectionUriInstanceId
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Id

指定已斷線會話的 ID。 Id 參數僅在斷線會話先前連接至當前會話時有效。

當會話儲存在本地電腦,但未連接到當前會話時,這個參數是有效的,但不適用。

參數屬性

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

參數集

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

-InstanceId

指定已斷線會話的實例 ID。 實例 ID 是一個 GUID,用來唯一識別本地或遠端電腦上的 PSSession 。 實例 ID 會儲存在 PSSession 的 InstanceId 屬性中。

參數屬性

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

參數集

ComputerInstanceId
Position:Named
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
ConnectionUriInstanceId
Position:Named
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
InstanceId
Position:Named
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-JobName

指定一個友善的名稱,讓該工作 Receive-PSSession 回歸。

Receive-PSSession 當 OutTarget 參數值為 Job,或在斷開連線的會話中執行的工作已在當前會話中啟動時,會回傳一個工作。

如果在斷開連線的會話中執行的工作是在當前會話中啟動的,PowerShell 會在會話中重用原始的工作物件,並忽略 JobName 參數的值。

如果在斷開連線的 session 中執行的工作是在另一個 session 中啟動的,PowerShell 會建立一個新的 job object。 它使用預設名稱,但你可以用這個參數來更改名稱。

如果 OutTarget 參數的預設值或明確值不是 Job,指令會成功,但 JobName 參數不會產生影響。

參數屬性

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

參數集

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

-Name

指定已斷線會話的友善名稱。

參數屬性

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

參數集

ComputerSessionName
Position:Named
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
ConnectionUriSessionName
Position:Named
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
SessionName
Position:Named
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-OutTarget

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

  • 工作。 在工作物件中非同步回傳結果。 你可以使用 JobName 參數來指定工作名稱或新名稱。
  • 主機。 同步回傳結果到命令列。 若指令正在繼續執行或結果包含大量物件,回應可能會延遲。

OutTarget 參數的預設值為 Host。 如果在斷開連線的會話中接收的指令是在當前會話中啟動的, OutTarget 參數的預設值就是該指令開始的形式。 如果指令是以工作狀態啟動,預設會回傳為工作。 否則,它會預設回到主機程式。

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

參數屬性

類型:OutTarget
預設值:None
接受的值:Default, Host, Job
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值: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 參數。 指令中設定的埠口適用於所有執行該指令的電腦或會話。 替代埠設定可能會防止命令在所有計算機上執行。

參數屬性

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

參數集

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

-Session

指定斷線的會話。 輸入包含 PSSession 的變數,或是建立或取得 PSSession 的指令,例如 Get-PSSession 指令。

參數屬性

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

參數集

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

-SessionOption

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

選項的預設值由 $PSSessionOption 喜好設定變數的值決定,前提是該變數已被設定。 否則,預設值是由會話組態中設定的選項所建立。

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

包含預設值的會話選項描述,請參閱 New-PSSessionOption。 關於 $PSSessionOption 偏好變數的資訊,請參見 about_Preference_Variables。 如需工作階段組態的詳細資訊,請參閱 about_Session_Configurations。

參數屬性

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

參數集

ComputerInstanceId
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
ComputerSessionName
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
ConnectionUriSessionName
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
ConnectionUriInstanceId
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-UseSSL

表示此指令小程式使用安全套接層(SSL)協定連接已斷線的會話。 根據預設,不會使用 SSL。

WS-Management 會加密透過網路傳輸的所有PowerShell內容。 UseSSL 是一種額外的保護措施,將資料傳送至 HTTPS 連線,而非 HTTP 連線。

如果你使用這個參數,但該指令使用的埠口沒有 SSL,指令就會失敗。

參數屬性

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

參數集

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

-WhatIf

顯示 Cmdlet 執行時會發生什麼事。 該 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

你可以將 session 物件管道傳送到這個 cmdlet,例如指令 Get-PSSession 長回傳的物件。

Int32

你可以把 session ID 管道輸入這個 cmdlet。

Guid

你可以在這個 cmdlet 中傳送 session 的實例 Ids。

String

你可以把會話名稱管道輸入這個 cmdlet。

輸出

Job

若 OutTarget 參數的值或預設值為 Job, Receive-PSSession 則回傳一個工作物件。

PSObject

此指令子會回傳在斷線會話中執行的指令結果(若有的話)。

備註

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

  • 所有平臺:
    • rcsn

此 Cmdlet 僅適用於 Windows 平臺。

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

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

會話的輸出緩衝模式決定了當會話斷線時,會話中的指令如何管理輸出。 當會話的 OutputBufferingMode 選項值為 Drop 且輸出緩衝區滿時,指令開始刪除輸出。 Receive-PSSession 無法恢復這個輸出。 欲了解更多關於輸出緩衝模式選項的資訊,請參閱 New-PSSessionOption 與 New-PSTransportOption 指令碼的說明文章。

當你連接 PSSession 或收到結果時,無法更改 PSSession 的閒置超時值。 SessionOptionReceive-PSSession 參數會取一個具有 IdleTimeout 值的 SessionOption 物件。 然而,當 SessionOption 物件連接 PSSession 或接收結果時,SessionOption 物件的 IdleTimeout 值及變數的 $PSSessionOptionIdleTimeout 值會被忽略。

  • 你可以在建立 PSSession 時,透過 or 指令(cmdletNew-PSSession)來設定和更改 Invoke-Command 的閒置時間,以及當你從 PSSession 斷線時。
  • PSSession 的 IdleTimeout 特性對於斷線會話至關重要,因為它決定了斷線會話在遠端電腦上維持多久。 斷線會話從斷線的那一刻起即被視為閒置,即使指令正在執行。

如果你用 cmdlet 的 Invoke-Command 參數在遠端工作階段啟動工作,工作物件會在目前的工作階段建立,即使工作在遠端工作階段執行。 如果你斷開遠端會話,目前會話中的工作物件也會與該工作斷開。 工作物件包含所有回傳給它的結果,但不會從斷開連線的作業中接收到新的結果。

如果另一個用戶端連接到包含該執行工作的工作階段,原本工作階段中交付給該工作物件的結果,在新連接的工作階段中就無法取得。 只有未送達原始工作物件的結果才會在重新連接的會話中提供。

同樣地,如果你在會話中啟動腳本,然後從會話中斷連線,腳本在斷線前交付給會話的結果,不會被其他連接到該會話的客戶端取得。

為了避免你打算斷開連線的會話中資料遺失,請使用 cmdlet 中的 Invoke-Command 參數。 由於此參數防止結果回傳至當前會話,當會話重新連接時,所有結果皆可取得。

你也可以透過 cmdlet Invoke-Command 在遠端會話中執行 Start-Job 指令來防止資料遺失。 此時,工作物件是在遠端會話中建立的。 你不能用 Receive-PSSession cmdlet 來取得工作結果。 相反地,先用 Connect-PSSession cmdlet 連接 session 的 session,然後再用 Invoke-Command cmdlet 在 session 裡執行 Receive-Job 指令。

當包含正在執行的工作會話斷線後再重新連接時,只有當該工作被斷開並重新連接到同一工作階段時,原始的工作物件才會被重複使用,且重新連接指令不會指定新的工作名稱。 如果會話重新連接到不同的客戶端會話,或指定了新的工作名稱,PowerShell 會為該新工作階段建立一個新的工作物件。

當你斷開 PSSession 時,會話狀態會顯示已斷開,可用性為無。

  • State 屬性的值相對於目前的會話。 值為「斷線」表示 PSSession 與目前的工作階段沒有連結。 不過,這並不表示 PSSession 與所有會話中斷連線。 它可能會連線到不同的工作階段。 若要判斷您是否可以連線或重新連線到會話,請使用 Availability 屬性。
  • 「 可用性 」值為「無」表示你可以連接該會話。 「忙碌」的值表示你無法連接到 PSSession ,因為它已經連接到另一個會話。
  • 如需有關工作階段的 狀態 屬性之值的詳細資訊,請參閱執行空間狀態 。
  • 如需會話之 Availability 屬性值的詳細資訊,請參閱 RunspaceAvailability。