現在のセッションの 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 コマンドレットは、Windows PowerShell バックグラウンド ジョブの結果を取得します。Receive-Job を使用して、Start-Job コマンドレットまたはいずれかのコマンドレットの AsJob パラメーターを使用して開始されたジョブの結果を取得します。すべてのジョブの結果を取得したり、名前、ID、インスタンス ID、コンピューター名、場所、またはセッションに基づいてジョブを識別したり、ジョブ オブジェクトを送信することによってジョブを識別することができます。

Windows PowerShell のバックグラウンド ジョブを開始すると、ジョブは開始されますが、その結果は直ちに表示されません。代わりに、コマンドはバックグラウンド ジョブを表すオブジェクトを返します。ジョブ オブジェクトには、ジョブに関する有用な情報が含まれています。ただし、ジョブの結果は含まれません。このメソッドを使用すると、ジョブの実行中も引き続きセッションで作業できます。Windows PowerShell のバックグラウンド ジョブの詳細については、「about_Jobs」を参照してください。

コマンドの結果を取得するには、Receive-Job コマンドレットを使用します。Receive-Job は、Receive-Job コマンドが送信されるまでに生成された結果を取得します。結果が完了していない場合は、追加の Receive-Job コマンドを実行して、残りの結果を取得することができます。

既定では、ジョブの結果は、結果を取得した際にシステムから削除されますが、結果を再取得できるように、Keep パラメーターを使用して結果を保存することが可能です。ジョブの結果を削除するには、Keep パラメーターを指定せずに結果を再取得するか、セッションを終了するか、Remove-Job コマンドレットを使用してジョブをセッションから削除します。

パラメーター

-ComputerName <string[]>

指定されたコンピューターで実行されたジョブの結果を取得します。コンピューター名を入力します。既定値は現在のセッションのすべてのジョブです。

このパラメーターは、ローカル コンピューターに保存されているジョブの結果の中から結果を選択します。データはリモート コンピューターからは取得されません。リモート コンピューターに保存されているジョブの結果を取得するには、Invoke-Command コマンドレットを使用して、リモートで Receive-Job コマンドを実行します。

必須

false

位置

2

既定値

パイプライン入力を許可する

true (ByPropertyName)

ワイルドカード文字を許可する

false

-Id <Int32[]>

指定された ID を持つジョブの結果を取得します。既定値は現在のセッションのすべてのジョブです。

ID は、現在のセッション内のジョブを一意に識別する整数です。インスタンス ID よりも覚えやすく入力も容易ですが、一意であるのは現在のセッション内のみです。1 つまたは複数の ID (コンマで区切る) を入力できます。ジョブの ID を検索するには、パラメーターを指定せずに「Get-Job」と入力します。

必須

true

位置

1

既定値

パイプライン入力を許可する

true (ByPropertyName)

ワイルドカード文字を許可する

false

-InstanceId <Guid[]>

指定されたインスタンス ID を持つジョブの結果を取得します。既定値は現在のセッションのすべてのジョブです。

インスタンス ID は、コンピューターのジョブを一意に識別する GUID です。ジョブのインスタンス ID を見つけるには、Get-Job コマンドレットを使用します。

必須

false

位置

1

既定値

パイプライン入力を許可する

true (ByPropertyName)

ワイルドカード文字を許可する

false

-Job <Job[]>

結果を取得するジョブを指定します。このパラメーターは Receive-Job コマンドで必要です。ジョブを格納する変数を入力するか、ジョブを取得するコマンドを入力します。パイプを使用してジョブ オブジェクトを Receive-Job に渡すこともできます。

必須

true

位置

1

既定値

パイプライン入力を許可する

true (ByValue, ByPropertyName)

ワイルドカード文字を許可する

false

-Keep

ジョブの結果を受信後でもシステムに保存します。既定では、ジョブの結果は、取得されたときに削除されます。

結果を削除するには、Keep パラメーターを指定せずに Receive-Job を使用して結果を再取得するか、セッションを終了するか、Remove-Job コマンドレットを使用してジョブをセッションから削除します。

必須

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 を格納する変数を入力するか、Get-PSSession コマンドなど、PSSession を取得するコマンドを入力します。既定値は現在のセッションのすべてのジョブです。

必須

false

位置

2

既定値

パイプライン入力を許可する

true (ByPropertyName)

ワイルドカード文字を許可する

false

<CommonParameters>

このコマンドレットは、次の共通パラメーターをサポートします: -Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer、および -OutVariable。Ô”¼š¤Ë¤Ä¤¤¤Æ¤Ï¡¢次を参照してください: about_Commonparameters.

入力と出力

入力値の型は、コマンドレットへのパイプが可能なオブジェクトの型です。戻り値の型は、コマンドレットによって返されるオブジェクトの型です。

入力

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 コマンドレットを使用して、"Get-Process" コマンドを実行するジョブを開始しますこのコマンドは、代入演算子 (=) を使用して、$job 変数に結果のジョブ オブジェクトを保存します。

2 番目のコマンドは、Receive-Job コマンドレットを使用してジョブの結果を取得します。ジョブは Job パラメーターを使用して指定しています。






例 2

C:\PS>$job = start-job -scriptblock {get-process}

C:\PS> $job | receive-job

説明
-----------
この例は、コマンドがパイプライン演算子 (|) を使用して、ジョブ オブジェクトを Receive-Job に渡すことを除いて、例 2 と同じです。その結果、コマンドには、ジョブを指定するための 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 パラメーターを使用して、リモート コンピューターで実行される複数のバックグラウンド ジョブのうちの 1 つの結果を取得します。

最初のコマンドは、Invoke-Command コマンドレットを使用して、3 台のリモート コンピューター上で Get-Service コマンドを実行するバックグラウンド ジョブを開始します。また、AsJob パラメーターを使用して、バックグラウンド ジョブとしてコマンドを実行します。このコマンドは、結果のジョブ オブジェクトを $j 変数に保存します。

ジョブを開始するために Invoke-Command の AsJob パラメーターを使用すると、ジョブはリモート コンピューターで実行されますが、ジョブ オブジェクトはローカル コンピューターに作成されます。そのため、ローカル コマンドを使用してジョブを管理します。

また、AsJob を使用すると、Windows PowerShell は、開始された各ジョブに対応する子ジョブを含む 1 つのジョブ オブジェクトを返します。この場合、ジョブ オブジェクトには、各リモート コンピューター上でそれぞれ実行されるジョブに対応する 3 つの子ジョブが含まれます。

2 番目のコマンドは、ドット メソッドを使用して、$j のジョブ オブジェクトの ChildJobs プロパティの値を表示します。この表示には、各リモート コンピューター上でそれぞれ実行されるジョブに対応する 3 つの子ジョブがコマンドによって作成されたことが示されます。
 
3 番目のコマンドは、Receive-Job コマンドレットを使用して、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

説明
-----------
この例は、3 台のリモート コンピューターで実行されるバックグラウンド ジョブの結果を取得する方法を示しています。

最初のコマンドは、New-PSSession コマンドレットを使用して、コマンドで指定された各サーバーでそれぞれ実行される 3 つの PSSession を作成します。PSSession は $s 変数に保存されます。

2 番目のコマンドは、Invoke-Command コマンドレットを使用して、$s 変数の各 PSSession で Start-Job コマンドを実行します。ジョブは、システム ログ内のイベントを取得する Get-Eventlog コマンドを実行します。結果は $j 変数に保存されます。

コマンドは Invoke-Command を使用して Start-Job コマンドを実行したため、実際には 3 台のコンピューターのそれぞれで独立した 3 つのジョブが開始されました。その結果、コマンドは、3 台の異なるコンピューターでローカルに実行された 3 つのジョブを表す 3 つのジョブ オブジェクトを返しました。

3 番目のコマンドは $j の 3 つのジョブ オブジェクトを表示します。

4 番目のコマンドは、Invoke-Command を使用して、$s の各PSSessions で Receive-Job コマンドを実行し、結果を $results 変数に保存します。

$j はローカル変数であるため、スクリプト ブロックは "param" キーワードを使用してコマンドの変数を宣言し、ArgumentList パラメーターを使用して $j の値を指定します。






関連項目




目次