Receive-Job
取得目前工作階段中 Windows PowerShell 背景工作的結果。
語法
Receive-Job [-Job] <Job[]> [[-ComputerName] <string[]>] [-Keep] [-NoRecurse] [<CommonParameters>]
Receive-Job [[-InstanceId] <Guid[]>] [-Keep] [-NoRecurse] [<CommonParameters>]
Receive-Job [-Job] <Job[]> [[-Location] <string[]>] [-Keep] [-NoRecurse] [<CommonParameters>]
Receive-Job [[-Name] <string[]>] [-Keep] [-NoRecurse] [<CommonParameters>]
Receive-Job [-Job] <Job[]> [[-Session] <PSSession[]>] [-Keep] [-NoRecurse] [<CommonParameters>]
Receive-Job [-Id] <Int32[]> [-Keep] [-NoRecurse] [<CommonParameters>]
描述
Receive-Job Cmdlet 會取得 Windows PowerShell 背景工作的結果。請使用 Receive-Job 取得使用 Start-Job Cmdlet 或是任何 Cmdlet 的 AsJob 參數所啟動之工作的結果。您可以依工作的名稱、識別碼、執行個體識別碼、電腦名稱、位置或工作階段,或是透過提交工作物件的方式,取得所有工作的結果或識別工作。
當您啟動 Windows PowerShell 背景工作時,工作隨即啟動,但是結果並不會立即出現。事實上,命令會傳回表示背景工作的物件。工作物件包含有用的工作資訊,但不包含結果。這個方法可讓您在工作執行時,繼續在工作階段中執行作業。如需 Windows PowerShell 中背景工作的詳細資訊,請參閱 about_Jobs。
若要取得命令的結果,請使用 Receive-Job Cmdlet。Receive-Job 會取得截至提交 Receive-Job 命令時,已經產生的結果。如果結果還不完整,您可以執行額外的 Receive-Job 命令,取得剩餘的結果。
根據預設,工作結果在接收後便會從系統刪除,但是您可以使用 Keep 參數儲存結果,以便重新接收結果。若要刪除工作結果,請重新接收結果 (不指定 Keep 參數)、關閉工作階段,或是使用 Remove-Job Cmdlet 刪除工作階段中的工作。
參數
-ComputerName <string[]>
取得在指定電腦執行之工作的結果。請輸入電腦名稱。預設為目前工作階段中的所有工作。
此參數會從儲存在本機電腦的工作結果進行選擇,而不會從遠端電腦取得資料。若要取得儲存在遠端電腦的工作結果,請使用 Invoke-Command Cmdlet 從遠端執行 Receive-Job 命令。
必要? |
false |
位置? |
2 |
預設值 |
|
接受管線輸入? |
true (ByPropertyName) |
接受萬用字元? |
false |
-Id <Int32[]>
取得具有所指定識別碼之工作的結果。預設為目前工作階段中的所有工作。
識別碼是整數,可唯一識別目前工作階段內的工作。它比執行個體識別碼更容易記得和輸入,但是只有在目前的工作階段中才具有唯一性。您可以輸入一個或多個識別碼 (以逗號分隔)。若要尋找工作的識別碼,請輸入 "Get-Job" 且不要指定參數。
必要? |
true |
位置? |
1 |
預設值 |
|
接受管線輸入? |
true (ByPropertyName) |
接受萬用字元? |
false |
-InstanceId <Guid[]>
取得具有所指定執行個體識別碼之工作的結果。預設為目前工作階段中的所有工作。
執行個體識別碼是一種 GUID,它能夠唯一識別電腦上的工作。若要尋找工作的執行個體識別碼,請使用 Get-Job Cmdlet。
必要? |
false |
位置? |
1 |
預設值 |
|
接受管線輸入? |
true (ByPropertyName) |
接受萬用字元? |
false |
-Job <Job[]>
指定要擷取其結果的工作。此參數為 Receive-Job 命令的必要項。請輸入包含工作的變數或可取得工作的命令。您也可以經由管道將工作物件輸出至 Receive-Job。
必要? |
true |
位置? |
1 |
預設值 |
|
接受管線輸入? |
true (ByValue, ByPropertyName) |
接受萬用字元? |
false |
-Keep
將工作結果儲存於系統中,即使在您已經接收工作結果後也是如此。在擷取工作結果後,預設會刪除工作結果。
若要刪除結果,請重新使用 Receive-Job 而不指定 Keep 參數來接收結果、關閉工作階段,或是使用 Remove-Job Cmdlet 刪除工作階段中的工作。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-Location <string[]>
只取得具有所指定位置之工作的結果。預設為目前工作階段中的所有工作。
必要? |
false |
位置? |
2 |
預設值 |
|
接受管線輸入? |
true (ByPropertyName) |
接受萬用字元? |
false |
-Name <string[]>
取得具有所指定好記名稱之工作的結果。預設為目前工作階段中的所有工作。
必要? |
false |
位置? |
1 |
預設值 |
|
接受管線輸入? |
true (ByPropertyName) |
接受萬用字元? |
false |
-NoRecurse
只從指定的工作中取得結果。根據預設,Receive-Job 也會取得所指定工作之所有子工作的結果。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-Session <PSSession[]>
取得在指定之 Windows PowerShell 工作階段 (PSSession) 執行之工作的結果。請輸入包含 PSSession 的變數或可取得 PSSession 的命令,例如 Get-PSSession 命令。預設為目前工作階段中的所有工作。
必要? |
false |
位置? |
2 |
預設值 |
|
接受管線輸入? |
true (ByPropertyName) |
接受萬用字元? |
false |
<CommonParameters>
這個 Cmdlet 支援一般參數:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。如需詳細資訊,請參閱 about_Commonparameters.
輸入和輸出
輸入型別是可經由管道輸出至 Cmdlet 的物件型別。傳回型別則是 Cmdlet 所傳回的物件型別。
輸入 |
System.Management.Automation.Job 您可以經由管道將工作物件輸出至 Receive-Job。 |
輸出 |
PSObject Receive-Job 會傳回工作中命令的結果。 |
範例 1
C:\PS>$job = start-job -scriptblock {get-process}
C:\PS> receive-job -job $job
描述
-----------
這些命令會使用 Job 參數取得特定工作的結果。第一個命令會使用 Start-Job Cmdlet,啟動執行 "Get-Process" 命令的工作。這個命令會使用指定運算子 (=),將產生的工作物件儲存在 $job 變數中。
第二個命令會使用 Receive-Job Cmdlet 取得工作結果,並使用 Job 參數指定工作。
範例 2
C:\PS>$job = start-job -scriptblock {get-process}
C:\PS> $job | receive-job
描述
-----------
這個範例與範例 2 相同,唯一的不同是這個命令會使用管線運算子 (|),將工作物件傳送給 Receive-Job。因此,這個命令並不需要使用 Job 參數指定工作。
範例 3
C:\PS>$j = invoke-command -computername Server01, Server02, Server03 -scriptblock {get-service} -AsJob
C:\PS> $j.childjobs
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
2 Job2 Completed True Server01 get-service
3 Job3 Completed True Server02 get-service
4 Job4 Completed True Server03 get-service
C:\PS> receive-job -name Job3 -keep
Status Name DisplayName PSComputerName
------ ----------- ----------- --------------
Running AeLookupSvc Application Experience Server02
Stopped ALG Application Layer Gateway Service Server02
Running Appinfo Application Information Server02
Running AppMgmt Application Management Server02
描述
-----------
這些命令會使用 Receive-Job 的 Name 參數,取得在遠端電腦上執行之其中一個背景工作的結果。
第一個命令會使用 Invoke-Command Cmdlet 啟動在三部遠端電腦執行 Get-Service 命令的背景工作。這個命令會使用 AsJob 參數,將命令當做背景工作來執行,並將產生的工作物件儲存在 $j 變數中。
使用 Invoke-Command 的 AsJob 參數啟動工作時,即使工作是在遠端電腦執行,仍會在本機電腦建立工作物件。因此,請使用本機命令來管理工作。
此外,當您使用 AsJob 時,Windows PowerShell 也會傳回一個工作物件,其中包含已啟動之每項工作的子工作。在本例中,工作物件包含三項子工作,每部遠端電腦的每一項工作各一項子工作。
第二個命令會使用點標記法,顯示 $j 中工作物件的 ChildJobs 屬性值。顯示中列出此命令建立的三項子工作,每部遠端電腦的工作各一項子工作。
第三個命令會使用 Receive-Job Cmdlet 取得在 Server02 電腦執行之 Job3 子工作的結果。這個命令會使用 Name 參數指定子工作的名稱,並使用 Keep 參數儲存工作結果 (即使已經接收過工作結果也一樣)。
範例 4
C:\PS>$s = new-pssession -computername Server01, Server02, Server03
C:\PS> $j = invoke-command -session $s -scriptblock {start-job -scriptblock {get-eventlog -logname system}}
C:\PS> $j
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 Job1 Completed True Localhost get-eventlog system
2 Job2 Completed True Localhost get-eventlog system
3 Job3 Completed True Localhost get-eventlog system
C:\PS> $results = invoke-command -session $s -scriptblock {param($j) receive-job -job $j} -ArgumentList $j
描述
-----------
這個範例會示範如何取得在三部遠端電腦上執行之背景工作的結果。
第一個命令會使用 New-PSSession Cmdlet 建立三個 PSSession (在命令中指定的每部伺服器各建立一個),並將這些 PSSession 儲存在 $s 變數中。
第二個命令會使用 Invoke-Command Cmdlet,對 $s 變數中的每個 PSSession 執行 Start-Job 命令。該工作會執行 Get-Eventlog 命令,以取得系統記錄檔中的事件。這個命令會將結果儲存在 $j 變數中。
由於這個命令是使用 Invoke-Command 來執行 Start-Job 命令,因此它實際上是在這三部電腦上分別啟動三個獨立的工作。因此,這個命令便傳回三個工作物件,代表在三部不同電腦上,以本機方式執行的三項工作。
第三個命令會顯示 $j 中三個工作物件。
第四個命令會使用 Invoke-Command,在 $s 的每個 PSSession 中執行 Receive-Job 命令並將結果儲存在 $results 變數中。
因為 $j 是本機變數,所以指令碼區塊會使用 "param" 關鍵字在命令中宣告變數,並使用 ArgumentList 參數來提供 $j 的值。
請參閱
概念
about_Jobs
about_Job_Details
about_remote_jobs
Start-Job
Get-Job
Wait-Job
Stop-Job
Remove-Job
Invoke-Command