セッション内で実行中のいずれかまたはすべての Windows PowerShell バックグランド ジョブが完了するまで、コマンド プロンプトが表示されないようにします。

構文

Wait-Job [[-InstanceId] <Guid[]>] [-Any] [-Timeout <int>] [<CommonParameters>]

Wait-Job [-Job] <Job[]> [-Any] [-Timeout <int>] [<CommonParameters>]

Wait-Job [[-Name] <string[]>] [-Any] [-Timeout <int>] [<CommonParameters>]

Wait-Job [-Id] <Int32[]> [-Any] [-Timeout <int>] [<CommonParameters>]

Wait-Job [-State {<NotStarted> | <Running> | <Completed> | <Failed> | <Stopped> | <Blocked>}] [-Any] [-Timeout <int>] [<CommonParameters>]

説明

Wait-Job コマンドレットは、Windows PowerShell バックグランド ジョブが完了するまで待機してから、コマンド プロンプトを表示します。いずれかのバックグランド ジョブまたはすべてのバックグランド ジョブが完了するまで待機するか、ジョブの最大待機時間を設定できます。

Wait-Job を使用して、Start-Job、または Invoke-Command の AsJob パラメーターを使用して開始されたバックグランド ジョブを取得できます。

ジョブ内のコマンドが完了すると、Wait-Job はコマンド プロンプトを表示し、ジョブ オブジェクトを返します。そのため、パイプを使用してジョブ オブジェクトを別のコマンドに渡すことができます。

パラメーター

-Any

ジョブが完了したときにコマンド プロンプトを表示します (また、ジョブ オブジェクトを返します)。既定では、Wait-Job は、指定したすべてのジョブが完了するまで待機してから、プロンプトを表示します。

必須

false

位置

named

既定値

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

false

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

false

-Id <Int32[]>

指定された ID を持つジョブを待機します。

ID は、現在のセッション内のジョブを一意に識別する整数です。InstanceId よりも覚えやすく入力も容易ですが、一意であるのは現在のセッション内のみです。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[]>

指定されたジョブを待機します。ジョブ オブジェクトを格納する変数を入力するか、ジョブ オブジェクトを取得するコマンドを入力します。パイプライン演算子を使用して、ジョブ オブジェクトを Wait-Job コマンドレットに送信することもできます。既定では、Wait-Job は現在のセッションで作成されたすべてのジョブを待機します。

必須

true

位置

1

既定値

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

true (ByValue, ByPropertyName)

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

false

-Name <string[]>

指定されたフレンドリ名を持つジョブを待機します。

必須

false

位置

1

既定値

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

true (ByPropertyName)

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

false

-State <JobState>

指定された状態のジョブを待機します。有効な値は、NotStarted、Running、Completed、Stopped、Failed、および Blocked です。

必須

false

位置

named

既定値

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

true (ByPropertyName)

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

false

-Timeout <int>

各バックグラウンド ジョブの最大待機時間を秒単位で定義します。既定値は -1 で、ジョブの実行時間に関係なく、ジョブが完了するまで待機します。タイミングは、Start-Job コマンドではなく、Wait-Job コマンドを送信したときに始まります。

この時間を超えると、ジョブがまだ実行されていても、待機が終了し、コマンド プロンプトに戻ります。エラー メッセージは表示されません。

必須

false

位置

named

既定値

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

false

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

false

<CommonParameters>

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

入力と出力

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

入力

System.Management.Automation.RemotingJob

パイプを使用してジョブ オブジェクトを Wait-Job に渡すことができます。

出力

System.Management.Automation.RemotingJob

Wait-Job は、完了したジョブを表すジョブ オブジェクトを返します。Timeout パラメーターの値を超えたために待機が終了した場合、Wait-Job パラメーターはオブジェクトを返しません。

例 1

C:\PS>get-job | wait-job

説明
-----------
このコマンドは、セッション内で実行中のすべてのバックグラウンド ジョブが完了するまで待機します。






例 2

C:\PS>$s = new-pssession server01, server02, server03

C:\PS> invoke-command -session $s -scriptblock {start-job -name Date1 -scriptblock {get-date}}

C:\PS> $done = invoke-command -session $s -command {wait-job -name Date1}

C:\PS> $done.count
3

説明
-----------
この例では、Start-Job コマンドレットを使用してリモート コンピューター上で開始されたジョブに Wait-Job コマンドレットを使用する方法を示します。Start-Job コマンドと Wait-Job コマンドは両方とも、Invoke-Command コマンドレットを使用してリモート コンピューターに送信されます。

この例では、Wait-Job を使用して、3 台の異なるコンピューター上でバックグランド ジョブとして実行されている Get-Date コマンドが完了したかどうかを確認します。

最初のコマンドは、3 台の各リモート コンピューター上に Windows PowerShell セッション (PSSession) を作成し、$s 変数に保存します。

2 番目のコマンドは、Invoke-Command コマンドレットを使用して、$s に保存された 3 つの各セッションで Start-Job コマンドを実行します。すべてのジョブの名前が Date1 になります。

3 番目のコマンドは、Invoke-Command コマンドレットを使用して Wait-Job コマンドを実行します。このコマンドは、各コンピューター上の Date1 ジョブが完了するまで待機します。結果のジョブ オブジェクトのコレクション (配列) は、$done 変数に保存されます。

4 番目のコマンドは、$done 変数に保存されたジョブ オブジェクトの配列の Count プロパティを使用して、完了したジョブの数を確認します。






例 3

C:\PS>$s = new-pssession (get-content machines.txt)  

C:\PS> $c = 'get-eventlog -log system | where {$_.EntryType -eq "error" -and $_.Source -eq "LSASRV"} | out-file errors.txt'

C:\PS> invoke-command -session $s -scriptblock {param($c)start-job -scriptblock {$c}} -ArgumentList $c

C:\PS> invoke-command -session $s -scriptblock {wait-job -any}

説明
-----------
この例では、Wait-Job の Any パラメーターを使用して、現在のセッションで実行中の多数のバックグランド ジョブのうち、いずれかのバックグランド ジョブが最初に完了した時間を確認します。また、Wait-Job コマンドレットを使用して、リモート ジョブが完了するまで待機する方法も示します。

最初のコマンドは、Machines.txt ファイルに示されている各コンピューター上に PSSession を作成し、PSSession を $s 変数に保存します。このコマンドは、Get-Content コマンドレットを使用してファイルの内容を取得します。Get-Content コマンドは、New-PSSession コマンドの前に確実に実行されるように、丸かっこで囲みます。

2 番目のコマンドは、Get-EventLog コマンド文字列 (引用符内) を $c 変数に保存します。

3 番目のコマンドは、Invoke-Command コマンドレットを使用して、$s に保存された各セッションで Start-Job コマンドを実行します。Start-Job コマンドは、$c に保存されたコマンドを実行するバックグラウンド ジョブを開始します。

$c 変数はローカル コンピューター上に存在するため、コマンドは "param" キーワードを使用してローカル変数をコマンド内で宣言し、ArgumentList パラメーターを使用してこれらの変数の値を指定します。

4 番目のコマンドは、Invoke-Command コマンドレットを使用して、セッションで Wait-Job コマンドを実行します。このコマンドは、Wait-Job コマンドレットを使用して、リモート コンピューターで最初のジョブが完了するまで待機します。






例 4

C:\PS>$s = new-pssession Server01, Server02, Server03 

C:\PS> $jobs = invoke-command -session $s -scriptblock {start-job -script {get-date}}

C:\PS> $done = invoke-command -session $s -scriptblock {wait-job -timeout 30}

説明
-----------
この例では、Wait-Job の Timeout パラメーターを使用して、リモート コンピューター上で実行中のジョブの最大待機時間を設定する方法を示します。

最初のコマンドは、3 台の各リモート コンピューター (Server01、Server02、および Server03) 上に PSSession を作成し、それらの PSSession を $s 変数に保存します。

2 番目のコマンドは、Invoke-Command コマンドレットを使用して、$s に保存された各 PSSession で Start-Job コマンドを実行します。結果のジョブ オブジェクトは $jobs 変数に保存されます。

3 番目のコマンドは、Invoke-Command コマンドレットを使用して、$s に保存された各 PSSession で Wait-Job コマンドを実行します。Wait-Job コマンドは、すべてのコマンドが 30 秒以内に完了したかどうかを確認します。Timeout パラメーターに 30 (秒) という値を指定して最大待機時間を設定し、コマンドの結果を $done 変数に保存します。

この例では、30 秒後に Server02 コンピューター上のコマンドのみが完了しています。Wait-Job は、待機を終了してコマンド プロンプトを表示し、完了したジョブを表すオブジェクトを返します。

$done 変数には、Server02 上で実行されたジョブを表すジョブ オブジェクトが格納されます。






例 5

C:\PS>wait-job -id 1,2,5 -any

説明
-----------
このコマンドは、ID により 3 つのジョブを識別し、いずれかのジョブが完了するまで待機します。最初のジョブが完了すると、コマンド プロンプトに戻ります。






例 6

C:\PS>wait-job -name DailyLog -timeout 120

説明
-----------
このコマンドは、DailyLog ジョブが完了するまで 120 秒 (2 分) 待機します。2 分後にジョブが完了しなかった場合でも、コマンド プロンプトに戻り、完了しなかったジョブはバックグランドで引き続き実行されます。






例 7

C:\PS>wait-job -name Job3

説明
-----------
この Wait-Job コマンドは、ジョブ名を使用して、待機するジョブを識別します。






例 8

C:\PS>C:\PS> $j = start-job -script {get-childitem *.ps1| where {$_lastwritetime -gt ((get-date) - (new-timespan -days 7))}}

C:\PS> $j | wait-job

説明
-----------
この例では、Start-Job コマンドレットを使用してローカル コンピューター上で開始されたジョブに Wait-Job コマンドレットを使用する方法を示します。

これらのコマンドは、過去 1 週間に追加または更新された Windows PowerShell スクリプト ファイルを取得するジョブを開始します。

最初のコマンドは、Start-Job コマンドレットを使用して、バックグラウンド ジョブをローカル コンピューター上で開始します。ジョブは、過去 1 週間に追加または更新され、".ps1" ファイル名拡張子を持つすべてのファイルを取得する Get-ChildItem コマンドを実行します。

3 番目のコマンドは、Wait-Job コマンドレットを使用して、ジョブが完了するまで待機します。ジョブが完了すると、ジョブに関する情報を含むジョブ オブジェクトが表示されます。






例 9

C:\PS>$s = new-pssession Server01, Server02, Server03

C:\PS> $j = invoke-command -session $s -scriptblock {get-process} -asjob

C:\PS> $j | wait-job

説明
-----------
この例では、Invoke-Command コマンドレットの AsJob パラメーターを使用してリモート コンピューター上で開始されたジョブに Wait-Job コマンドレットを使用する方法を示します。AsJob を使用すると、ジョブがリモート コンピューター上で実行される場合でも、ジョブはローカル コンピューターに作成され、結果は自動的にローカル コンピューターに返されます。

この例では、Wait-Job を使用して、3 台のリモート コンピューター上のセッションで実行中の Get-Process コマンドが完了したかどうかを確認します。

最初のコマンドは、3 台のコンピューター上に PSSession を作成し、$s 変数に保存します。

2 番目のコマンドは、Invoke-Command コマンドレットを使用して、$s に保存されている 3 つの各 PSSession で Get-Process コマンドを実行します。このコマンドは、AsJob パラメーターを使用して、バックグラウンド ジョブとしてコマンドを非同期的に実行します。このコマンドは、Start-Job を使用して開始したジョブと同様のジョブ オブジェクトを返し、ジョブ オブジェクトが $j 変数に保存されます。

3 番目のコマンドは、パイプライン演算子 (|) を使用して $j に保存されたジョブ オブジェクトを Wait-Job コマンドレットに渡します。この場合、ジョブはローカル コンピューター上に存在するため、Invoke-Command コマンドが必要ないことに注意してください。






例 10

C:\PS>get-job

Id   Name     State      HasMoreData     Location             Command
--   ----     -----      -----------     --------             -------
1    Job1     Completed  True            localhost,server01.. get-service
4    Job4     Completed  True            localhost            dir | where

C:\PS> wait-job -id 1

説明
-----------
このコマンドは、ID 値が 1 であるジョブを待機します。






関連項目




目次