セッション内で実行中のいずれかまたはすべての 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 であるジョブを待機します。
関連項目