取得目前工作階段中 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 的值。






請參閱




目錄