Wait-Job
セッションで実行されている 1 つまたはすべての PowerShell ジョブが終了状態になるまで待機します。
構文
		SessionIdParameterSet (既定)
	  
	Wait-Job
    [-Id] <Int32[]>
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [<CommonParameters>]
	
		JobParameterSet
	  
	Wait-Job
    [-Job] <Job[]>
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [<CommonParameters>]
	
		NameParameterSet
	  
	Wait-Job
    [-Name] <String[]>
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [<CommonParameters>]
	
		InstanceIdParameterSet
	  
	Wait-Job
    [-InstanceId] <Guid[]>
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [<CommonParameters>]
	
		StateParameterSet
	  
	Wait-Job
    [-State] <JobState>
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [<CommonParameters>]
	
		FilterParameterSet
	  
	Wait-Job
    [-Filter] <Hashtable>
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [<CommonParameters>]
	説明
              Wait-Job コマンドレットは、ジョブが終了状態になるまで待機してから実行を続行します。
終了状態は次のとおりです。
- 完了済み
 - 失敗しました
 - 停止しました
 - 一時停止されています
 - 切断された
 
指定されたジョブ、またはすべてのジョブが終了状態になるまで待機できます。 
              Timeout パラメーターを使用してジョブの最大待機時間を設定したり、Force パラメーターを使用して Suspended または Disconnected 状態のジョブを待機したりすることもできます。
ジョブ内のコマンドが完了すると、Wait-Job はジョブ オブジェクトを返し、実行を続行します。
              Wait-Job コマンドレットを使用して、Start-Job コマンドレットまたは  コマンドレットの Invoke-Command パラメーターを使用してジョブが開始されるのを待機できます。 ジョブの詳細については、about_Jobsを参照してください。
Windows PowerShell 3.0 以降、Wait-Job コマンドレットは、ワークフロー ジョブやスケジュールされたジョブのインスタンスなどのカスタム ジョブの種類を待機します。 
              Wait-Job が特定の種類のジョブを待機できるようにするには、セッションにカスタム ジョブの種類をサポートするモジュールをインポートしてから、Get-Job コマンドレットを実行します。この際、Import-Module コマンドレットを使用するか、モジュール内のコマンドレットを使用または取得します。 特定のカスタム ジョブの種類については、カスタム ジョブの種類機能のドキュメントを参照してください。
例
例 1: すべてのジョブを待機する
Get-Job | Wait-Job
このコマンドは、セッションで実行されているすべてのジョブが完了するまで待機します。
例 2: Start-Job を使用してリモート コンピューターで開始されたジョブを待機する
$s = New-PSSession Server01, Server02, Server03
Invoke-Command -Session $s -ScriptBlock {Start-Job -Name Date1 -ScriptBlock {Get-Date}}
$done = Invoke-Command -Session $s -Command {Wait-Job -Name Date1}
$done.Count
3
この例では、リモートコンピューターで開始されたジョブに対してWait-Job コマンドレットを使用し、Start-Job コマンドレットを利用する方法を示します。 
              Start-Job コマンドと Wait-Job コマンドの両方が、Invoke-Command コマンドレットを使用してリモート コンピューターに送信されます。
この例では、Wait-Job を使用して、3 つの異なるコンピューターでジョブとして実行されている Get-Date コマンドが完了したかどうかを確認します。
最初のコマンドは、3 台のリモート コンピューターそれぞれに Windows PowerShell セッション (PSSession) を作成し、$s 変数に格納します。
2 番目のコマンドでは、Invoke-Command を使用して、Start-Jobの 3 つの各セッションで $s を実行します。
すべてのジョブの名前は Date1 です。
3 番目のコマンドでは、Invoke-Command を使用して Wait-Jobを実行します。 このコマンドは、各コンピューターの Date1 ジョブが完了するまで待機します。 結果として得られた job オブジェクトのコレクション (array) は $done 変数に格納されます。
4 番目のコマンドでは、 変数内のジョブ オブジェクトの配列の $done プロパティを使用して、完了したジョブの数を決定します。
例 3: 最初のジョブがいつ終了するかを判別する
$s = New-PSSession -ComputerName (Get-Content -Path .\Machines.txt)
$c = 'Get-EventLog -LogName System | Where-Object {$PSItem.EntryType -eq "error" --and $PSItem.Source -eq "LSASRV"} | Out-File -FilePath Errors.txt'
Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {$Using:c}
Invoke-Command -Session $s -ScriptBlock {Wait-Job -Any}
この例では、 の Wait-Job パラメーターを使用して、現在のセッションで実行されている多数のジョブの最初のジョブが終了状態になっているかどうかを判断します。 また、Wait-Job コマンドレットを使用してリモート ジョブが完了するまで待機する方法についても説明します。
最初のコマンドは、Machines.txt ファイルにリストされている各コンピューターに PSSession を作成し、PSSession オブジェクトを $s 変数に格納します。 このコマンドでは、Get-Content コマンドレットを使用してファイルの内容を取得します。 
              Get-Content コマンドは、New-PSSession コマンドの前に実行されるようにかっこで囲まれています。
2 番目のコマンドは、Get-EventLog コマンド文字列を引用符で囲んで $c 変数に格納します。
3 番目のコマンドでは、Invoke-Command コマンドレットを使用して、Start-Jobの各セッションで $s を実行します。
              Start-Job コマンドは、Get-EventLog 変数で $c コマンドを実行するジョブを開始します。
このコマンドは、Using: スコープ修飾子を使用して、$c 変数がローカル コンピューターで定義されたことを示します。 
              Using: スコープ修飾子は、Windows PowerShell 3.0 で導入されています。 
              Using: スコープ修飾子の詳細については、「about_Remote_Variables」を参照してください。
4 番目のコマンドでは、Invoke-Command を使用してセッションで Wait-Job コマンドを実行します。 
              Any パラメーターを使用して、リモート コンピューターの最初のジョブが終了状態になるまで待機します。
例 4: リモート コンピューター上のジョブの待機時間を設定する
PS> $s = New-PSSession -ComputerName Server01, Server02, Server03
PS> $jobs = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {Get-Date}}
PS> $done = Invoke-Command -Session $s -ScriptBlock {Wait-Job -Timeout 30}
PS>
この例では、 の Wait-Job パラメーターを使用して、リモート コンピューターで実行されているジョブの最大待機時間を設定する方法を示します。
最初のコマンドは、3 つのリモート コンピューター (Server01、Server02、Server03) のそれぞれに PSSession を作成し、PSSession オブジェクトを $s 変数に格納します。
2 番目のコマンドでは、Invoke-Command を使用して、Start-Jobの各 PSSession オブジェクトで $s を実行します。 結果のジョブ オブジェクトが $jobs 変数に格納されます。
3 番目のコマンドでは、Invoke-Command を使用して、Wait-Jobの各セッションで $s を実行します。 
              Wait-Job コマンドは、すべてのコマンドが 30 秒以内に完了したかどうかを判断します。 値が 30 の Timeout パラメーターを使用して最大待機時間を設定し、コマンドの結果を $done 変数に格納します。
この場合、30 秒後に、Server02 コンピューター上のコマンドのみが完了します。 
              Wait-Job が待機を終了し、完了したジョブを表すオブジェクトを返して、コマンドプロンプトを表示します。
              $done 変数には、Server02 で実行されたジョブを表すジョブ オブジェクトが含まれています。
例 5: 複数のジョブのいずれかが完了するまで待機する
Wait-Job -Id 1, 2, 5 -Any
このコマンドは、ID によって 3 つのジョブを識別し、いずれかのジョブが終了状態になるまで待機します。 最初のジョブが完了すると、実行が続行されます。
例 6: ある期間待機してから、ジョブをバックグラウンドで続行できるようにする
Wait-Job -Name "DailyLog" -Timeout 120
このコマンドは、DailyLog ジョブが完了するまで 120 秒 (2 分) 待機します。 ジョブが次の 2 分間に完了しない場合、実行は続行され、ジョブはバックグラウンドで実行され続けます。
例 7: 名前でジョブを待機する
Wait-Job -Name "Job3"
このコマンドは、ジョブ名を使用して、待機するジョブを識別します。
ローカルコンピューターでStart-Jobから開始されたジョブを待機する例8
$j = Start-Job -ScriptBlock {Get-ChildItem -Filter *.ps1 | Where-Object {$PSItem.LastWriteTime -gt ((Get-Date) - (New-TimeSpan -Days 7))}}
$j | Wait-Job
この例では、Wait-Jobを使用してローカル コンピューターで開始されたジョブで Start-Job コマンドレットを使用する方法を示します。
これらのコマンドは、先週追加または更新された Windows PowerShell スクリプト ファイルを取得するジョブを開始します。
最初のコマンドでは、Start-Job を使用してローカル コンピューターでジョブを開始します。 ジョブは、Get-ChildItem コマンドを実行して、前の週に追加または更新された .ps1 ファイル名拡張子を持つすべてのファイルを取得します。
3 番目のコマンドでは、Wait-Job を使用して、ジョブが終了状態になるまで待機します。 ジョブが完了すると、ジョブに関する情報を含むジョブ オブジェクトが表示されます。
例 9: Invoke-Command を使用してリモート コンピューターで開始されたジョブを待機する
$s = New-PSSession -ComputerName Server01, Server02, Server03
$j = Invoke-Command -Session $s -ScriptBlock {Get-Process} -AsJob
$j | Wait-Job
この例では、Wait-Jobの AsJob パラメーターを使用して、リモート コンピューターで開始されたジョブで Invoke-Command を使用する方法を示します。 
              AsJobを使用する場合、ジョブはローカル コンピューターで作成され、リモート コンピューターでジョブが実行されている場合でも、結果はローカル コンピューターに自動的に返されます。
この例では、Wait-Job を使用して、3 台のリモート コンピューター上のセッションで実行されている Get-Process コマンドが終了状態であるかどうかを判断します。
最初のコマンドは、3 台のコンピューター PSSession オブジェクトを作成し、$s 変数に格納します。
2 番目のコマンドでは、Invoke-Command を使用して、Get-Processの 3 つの各セッションで $s を実行します。
コマンドは、AsJob パラメーターを使用して、ジョブとしてコマンドを非同期的に実行します。 このコマンドは、Start-Jobを使用して開始されたジョブと同様にジョブ オブジェクトを返し、ジョブ オブジェクトは $j 変数に格納されます。
3 番目のコマンドでは、パイプライン演算子 (|) を使用して、$j のジョブ オブジェクトを Wait-Job コマンドレットに送信します。 この場合、ジョブはローカル コンピューター上に存在するため、Invoke-Command コマンドは必要ありません。
例 10: ID を持つジョブを待機する
Get-Job
Id   Name     State      HasMoreData     Location             Command
--   ----     -----      -----------     --------             -------
1    Job1     Completed  True            localhost,Server01.. Get-Service
4    Job4     Completed  True            localhost            dir | where
Wait-Job -Id 1
このコマンドは、ID 値が 1 であるジョブを待機します。
パラメーター
-Any
このコマンドレットがジョブ オブジェクトを返し、ジョブが完了したときに実行を続行することを示します。 既定では、Wait-Job は、指定されたすべてのジョブが完了するまで待機してからプロンプトを表示します。
パラメーターのプロパティ
| 型: | SwitchParameter | 
| 規定値: | None | 
| ワイルドカードのサポート: | False | 
| DontShow: | False | 
パラメーター セット
(All)
| 配置: | Named | 
| 必須: | False | 
| パイプラインからの値: | False | 
| プロパティ名別のパイプラインからの値: | False | 
| 残りの引数からの値: | False | 
-Filter
条件のハッシュ テーブルを指定します。 このコマンドレットは、ハッシュ テーブル内のすべての条件を満たすジョブを待機します。 キーがジョブ プロパティで、値がジョブ プロパティ値であるハッシュ テーブルを入力します。
このパラメーターは、ワークフロー ジョブやスケジュールされたジョブなどのカスタム ジョブの種類でのみ機能します。 
              Start-Job コマンドレットを使用して作成されたジョブなど、標準ジョブでは機能しません。 このパラメーターのサポートについては、ジョブの種類のヘルプ トピックを参照してください。
このパラメーターは、Windows PowerShell 3.0 で導入されました。
パラメーターのプロパティ
| 型: | Hashtable | 
| 規定値: | None | 
| ワイルドカードのサポート: | False | 
| DontShow: | False | 
パラメーター セット
					FilterParameterSet 
					
				  
				| 配置: | 0 | 
| 必須: | True | 
| パイプラインからの値: | False | 
| プロパティ名別のパイプラインからの値: | True | 
| 残りの引数からの値: | False | 
-Force
このコマンドレットが Suspended 状態または Disconnected 状態のジョブを待機し続けるかどうかを示します。 既定では、ジョブが次のいずれかの状態にある場合、Wait-Job は戻るか待機を終了します。
- 完了済み
 - 失敗しました
 - 停止しました
 - 一時停止されています
 - 切断された
 
このパラメーターは、Windows PowerShell 3.0 で導入されました。
パラメーターのプロパティ
| 型: | SwitchParameter | 
| 規定値: | None | 
| ワイルドカードのサポート: | False | 
| DontShow: | False | 
パラメーター セット
(All)
| 配置: | Named | 
| 必須: | False | 
| パイプラインからの値: | False | 
| プロパティ名別のパイプラインからの値: | False | 
| 残りの引数からの値: | False | 
-Id
このコマンドレットが待機するジョブの ID の配列を指定します。
ID は、現在のセッションのジョブを一意に識別する整数です。 インスタンス ID よりも覚えて入力する方が簡単ですが、現在のセッションでのみ一意です。 1 つ以上の ID をコンマで区切って入力できます。 ジョブの ID を検索するには、「Get-Job」と入力します。
パラメーターのプロパティ
| 型: | Int32[]  | 
| 規定値: | None | 
| ワイルドカードのサポート: | False | 
| DontShow: | False | 
パラメーター セット
					SessionIdParameterSet 
					
				  
				| 配置: | 0 | 
| 必須: | True | 
| パイプラインからの値: | False | 
| プロパティ名別のパイプラインからの値: | True | 
| 残りの引数からの値: | False | 
-InstanceId 
		このコマンドレットが待機するジョブのインスタンス ID の配列を指定します。 既定値はすべてのジョブです。
インスタンス ID は、コンピューター上のジョブを一意に識別する GUID です。 ジョブのインスタンス ID を検索するには、Get-Jobを使用します。
パラメーターのプロパティ
| 型: | Guid[]  | 
| 規定値: | None | 
| ワイルドカードのサポート: | False | 
| DontShow: | False | 
パラメーター セット
					InstanceIdParameterSet 
					
				  
				| 配置: | 0 | 
| 必須: | True | 
| パイプラインからの値: | False | 
| プロパティ名別のパイプラインからの値: | True | 
| 残りの引数からの値: | False | 
-Job
このコマンドレットが待機するジョブを指定します。 ジョブ オブジェクトを含む変数、またはジョブ オブジェクトを取得するコマンドを入力します。 パイプライン演算子を使用して、ジョブ オブジェクトを Wait-Job コマンドレットに送信することもできます。 既定では、Wait-Job は現在のセッションで作成されたすべてのジョブを待機します。
パラメーターのプロパティ
| 型: | Job[]  | 
| 規定値: | None | 
| ワイルドカードのサポート: | False | 
| DontShow: | False | 
パラメーター セット
					JobParameterSet 
					
				  
				| 配置: | 0 | 
| 必須: | True | 
| パイプラインからの値: | True | 
| プロパティ名別のパイプラインからの値: | True | 
| 残りの引数からの値: | False | 
-Name
このコマンドレットが待機するジョブのフレンドリ名を指定します。
パラメーターのプロパティ
| 型: | String[]  | 
| 規定値: | None | 
| ワイルドカードのサポート: | False | 
| DontShow: | False | 
パラメーター セット
					NameParameterSet 
					
				  
				| 配置: | 0 | 
| 必須: | True | 
| パイプラインからの値: | False | 
| プロパティ名別のパイプラインからの値: | True | 
| 残りの引数からの値: | False | 
-State
ジョブの状態を指定します。 このコマンドレットは、指定された状態のジョブのみを待機します。 このパラメーターに使用できる値は次のとおりです。
- NotStarted
 - ランニング
 - 完了済み
 - 失敗しました
 - 停止しました
 - ブロックされました
 - 一時停止されています
 - 切断された
 - 一時停止
 - 停車
 
ジョブの状態の詳細については、「JobState 列挙」を参照してください。
パラメーターのプロパティ
| 型: | JobState | 
| 規定値: | None | 
| 指定可能な値: | NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint | 
| ワイルドカードのサポート: | False | 
| DontShow: | False | 
パラメーター セット
					StateParameterSet 
					
				  
				| 配置: | 0 | 
| 必須: | True | 
| パイプラインからの値: | False | 
| プロパティ名別のパイプラインからの値: | True | 
| 残りの引数からの値: | False | 
-Timeout
各ジョブの最大待機時間を秒単位で指定します。 既定値 -1 は、コマンドレットがジョブが完了するまで待機することを示します。 タイミングは、Wait-Job コマンドではなく、Start-Job コマンドを送信したときに開始されます。
この時間を超えると、ジョブがまだ実行されている場合でも、待機が終了し、実行が続行されます。 このコマンドでは、エラー メッセージは表示されません。
パラメーターのプロパティ
| 型: | Int32 | 
| 規定値: | None | 
| ワイルドカードのサポート: | False | 
| DontShow: | False | 
| Aliases: | TimeoutSec | 
パラメーター セット
(All)
| 配置: | Named | 
| 必須: | False | 
| パイプラインからの値: | False | 
| プロパティ名別のパイプラインからの値: | False | 
| 残りの引数からの値: | False | 
CommonParameters
このコマンドレットでは、一般的なパラメーター -Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction、-WarningVariable の各パラメーターがサポートされています。 詳細については、about_CommonParametersを参照してください。
入力
System.Management.Automation.RemotingJob
ジョブ オブジェクトをこのコマンドレットにパイプできます。
出力
System.Management.Automation.PSRemotingJob
このコマンドレットは、終了状態のジョブを表すジョブ オブジェクトを返します。 
              Timeout パラメーターの値を超えたために待機が終了した場合、Wait-Job はオブジェクトを返しません。
メモ
PowerShell には、Wait-Jobの次のエイリアスが含まれています。
- すべてのプラットフォーム:
wjb
 
既定では、ジョブが次のいずれかの状態にある場合、Wait-Job は戻るか待機を終了します。
- 完了済み
 - 失敗しました
 - 停止しました
 - 一時停止されています
 - 切断された
 
中断されたジョブと切断されたジョブを待機し続けるように Wait-Job に指示するには、Force パラメーターを使用します。