Wait-Job
セッションで実行されている PowerShell ジョブの 1 つ以上が終了状態になるまで待機します。
構文
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Id] <Int32[]>
[<CommonParameters>]
Wait-Job
[-Job] <Job[]>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Name] <String[]>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-InstanceId] <Guid[]>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-State] <JobState>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Filter] <Hashtable>
[<CommonParameters>]
説明
コマンドレットは Wait-Job
、ジョブが終了状態になるまで待機してから実行を続行します。
終了状態は次のとおりです。
- 完了
- 失敗
- 停止済み
- Suspended
- [Disconnected](切断済み)
指定したジョブ、またはすべてのジョブが終了状態になるまで待機できます。 Timeout パラメーターを使用してジョブの最大待機時間を設定することも、Force パラメーターを使用して または Disconnected
状態のSuspended
ジョブを待機することもできます。
ジョブ内のコマンドが完了すると、 Wait-Job
ジョブ オブジェクトが返され、実行が続行されます。
コマンドレットをWait-Job
使用すると、コマンドレットの コマンドレットまたは AsJob パラメーターをStart-Job
使用して開始されたジョブをInvoke-Command
待機できます。 ジョブの詳細については、「 about_Jobs」を参照してください。
Windows PowerShell 3.0 以降、Wait-Job
コマンドレットは、ワークフロー ジョブやスケジュールされたジョブのインスタンスなどのカスタム ジョブの種類を待機します。 Wait-Job
特定の種類のジョブを待機できるようにするには、コマンドレットを使用するか、モジュールで コマンドレットを使用Import-Module
または取得してコマンドレットを実行Get-Job
する前に、カスタム ジョブの種類をサポートするモジュールをセッションにインポートします。 特定のカスタム ジョブの種類については、カスタムのジョブの種類機能のドキュメントを参照してください。
例
例 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
示します。 コマンドと Wait-Job
コマンドの両方Start-Job
が、 コマンドレットを使用してリモート コンピューターにInvoke-Command
送信されます。
この例では、 を使用 Wait-Job
して、 Get-Date
3 つの異なるコンピューターでジョブとして実行されているコマンドが完了したかどうかを確認します。
最初のコマンドは、3 つのリモート コンピューターのそれぞれにWindows PowerShell セッション (PSSession) を作成し、変数に$s
格納します。
2 番目のコマンドでは、 を使用Invoke-Command
して、 の 3 つの各セッションで $s
を実行Start-Job
します。
すべてのジョブの名前は Date1 です。
3 番目のコマンドでは、 を使用 Invoke-Command
して を実行 Wait-Job
します。 このコマンドは、各コンピューター上のジョブが Date1
完了するまで待機します。 結果として得られるジョブ オブジェクトのコレクション (配列) が変数に$done
格納されます。
4 番目のコマンドは、変数内のジョブ オブジェクトの配列の Count プロパティを $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
Any パラメーターを使用して、現在のセッションで実行されている多数のジョブの最初が終了状態になるタイミングを確認します。 また、 コマンドレットを使用してリモート ジョブが Wait-Job
完了するまで待機する方法も示します。
最初のコマンドは、Machines.txt ファイルにリストされている各コンピューターに PSSession を作成し、 PSSession オブジェクトを $s
変数に格納します。 コマンドは、 コマンドレットを Get-Content
使用してファイルの内容を取得します。 コマンドは Get-Content
、コマンドの前 New-PSSession
に実行されるようにかっこで囲まれています。
2 番目のコマンドは、コマンド文字列を Get-EventLog
引用符で囲んで変数に $c
格納します。
3 番目のコマンドでは、 の各セッション$s
でコマンドレットを使用Invoke-Command
して実行Start-Job
します。
コマンドは Start-Job
、 変数で コマンドを実行する Get-EventLog
ジョブを $c
開始します。
コマンドは、 Using スコープ修飾子を使用して、変数が $c
ローカル コンピューターで定義されたことを示します。 Using スコープ修飾子は、Windows PowerShell 3.0 で導入されました。 Using scope 修飾子の詳細については、「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
Timeout パラメーターを使用して、リモート コンピューターで実行されているジョブの最大待機時間を設定する方法を示します。
最初のコマンドは、3 つのリモート コンピューター (Server01、Server02、Server03) のそれぞれに PSSession を作成し、 PSSession オブジェクトを $s
変数に格納します。
2 番目のコマンドでは、 を使用Invoke-Command
して、 の各 PSSession オブジェクトで $s
を実行Start-Job
します。 結果のジョブ オブジェクトが 変数に $jobs
格納されます。
3 番目のコマンドでは、 を使用Invoke-Command
して、 の各セッションで $s
を実行Wait-Job
します。 コマンドは Wait-Job
、すべてのコマンドが 30 秒以内に完了したかどうかを判断します。 値が 30 の Timeout パラメーターを使用して最大待機時間を設定し、コマンドの結果を 変数に $done
格納します。
この場合に、30 秒後に Server02 コンピューター上のコマンドのみが完了しました。 Wait-Job
は待機を終了し、完了したジョブを表す オブジェクトを返し、コマンド プロンプトを表示します。
変数には $done
、Server02 で実行されたジョブを表すジョブ オブジェクトが含まれています。
例 5: 複数のジョブのいずれかが完了するまで待つ
Wait-Job -id 1,2,5 -Any
このコマンドは、3 つのジョブを ID で識別し、いずれかのジョブが終了状態になるまで待機します。 最初のジョブが完了すると、実行が続行されます。
例 6: ある期間待ってから、ジョブをバックグラウンドで続行できるようにする
Wait-Job -Name "DailyLog" -Timeout 120
このコマンドは、DailyLog ジョブが完了するまで 120 秒 (2 分) 待機します。 ジョブが次の 2 分間に完了しない場合、実行は続行され、ジョブはバックグラウンドで引き続き実行されます。
例 7: 名前でジョブを待機する
Wait-Job -Name "Job3"
このコマンドは、ジョブ名を使用して、待機するジョブを識別します。
例 8: Start-Job で開始されたローカル コンピューター上のジョブを待機する
$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
する方法を示します。
これらのコマンドは、過去 1 週間に追加または更新された Windows PowerShell スクリプト ファイルを取得するジョブを開始します。
最初のコマンドでは、 を使用 Start-Job
してローカル コンピューターでジョブを開始します。 ジョブは、前の週に追加または更新された .ps1 ファイル名拡張子を持つすべてのファイルを取得するコマンドを実行 Get-ChildItem
します。
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
この例では、 の AsJob パラメーターInvoke-Command
を使用Wait-Job
して、リモート コンピューターで開始されたジョブで を使用する方法を示します。 AsJob を使用する場合、ジョブはローカル コンピューターに作成され、ジョブがリモート コンピューターで実行されている場合でも、結果はローカル コンピューターに自動的に返されます。
この例では、 を使用 Wait-Job
して、3 台のリモート コンピューター上のセッションで実行されているコマンドが終了状態であるかどうかを Get-Process
判断します。
最初のコマンドは、3 台のコンピューターに PSSession オブジェクトを作成し、 変数に $s
格納します。
2 番目のコマンドでは、 を使用Invoke-Command
して、 の 3 つの各セッションで $s
を実行Get-Process
します。
コマンドは 、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
指定されたすべてのジョブが完了するまで待機してから、プロンプトを表示します。
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Filter
条件のハッシュ テーブルを指定します。 このコマンドレットは、ハッシュ テーブル内のすべての条件を満たすジョブを待機します。 ジョブのプロパティをキー、ジョブのプロパティ値を値とするハッシュ テーブルを入力します。
このパラメーターは、ワークフロー ジョブ、スケジュールされたジョブなどの、カスタムのジョブの種類に対してのみ機能します。 コマンドレットを使用して作成されたジョブなど、標準ジョブでは Start-Job
機能しません。 このパラメーターのサポートについては、ジョブの種類のヘルプ トピックを参照してください。
このパラメーターは Windows PowerShell 3.0 で導入されました。
Type: | Hashtable |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Force
このコマンドレットが中断状態または切断状態のジョブを待機し続けるかどうかを示します。 既定では、 Wait-Job
ジョブが次のいずれかの状態にある場合、待機を返すか終了します。
- 完了
- 失敗
- 停止済み
- Suspended
- [Disconnected](切断済み)
このパラメーターは Windows PowerShell 3.0 で導入されました。
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Id
このコマンドレットが待機するジョブの ID の配列を指定します。
ID は、現在のセッションのジョブを一意に識別する整数です。 インスタンス ID よりも覚えて入力する方が簡単ですが、現在のセッションでのみ一意です。 1 つ以上の ID をコンマで区切って入力できます。 ジョブの ID を見つけるには、「」と入力します Get-Job
。
Type: | Int32[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-InstanceId
このコマンドレットが待機するジョブのインスタンス ID の配列を指定します。 既定値はすべてのジョブです。
インスタンス ID は、コンピューター上のジョブを一意に識別する GUID です。 ジョブのインスタンス ID を見つけるには、 を使用します Get-Job
。
Type: | Guid[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Job
このコマンドレットが待機するジョブを指定します。 ジョブ オブジェクトが格納されている変数、またはジョブ オブジェクトを取得するコマンドを入力します。 パイプライン演算子を使用して、コマンドレットにジョブ オブジェクトを Wait-Job
送信することもできます。 既定では、 Wait-Job
現在のセッションで作成されたすべてのジョブを待機します。
Type: | Job[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Name
このコマンドレットが待機するジョブのフレンドリ名を指定します。
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-State
ジョブの状態を指定します。 このコマンドレットは、指定された状態のジョブのみを待機します。 このパラメーターの有効値は、次のとおりです。
- NotStarted
- 実行中
- 完了
- 失敗
- 停止済み
- Blocked
- Suspended
- [Disconnected](切断済み)
- 中断中
- 停止中
ジョブの状態の詳細については、「 JobState 列挙」を参照してください。
Type: | JobState |
Accepted values: | NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Timeout
各ジョブの最大待機時間を秒単位で指定します。 既定値 -1 は、コマンドレットがジョブが完了するまで待機することを示します。 コマンドではなく、コマンドを Wait-Job
送信すると、タイミングが Start-Job
開始されます。
この時間を超えると、ジョブがまだ実行されている場合でも、待機が終了し、実行が続行されます。 このコマンドでは、エラー メッセージは表示されません。
Type: | Int32 |
Aliases: | TimeoutSec |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
入力
System.Management.Automation.RemotingJob
ジョブ オブジェクトをこのコマンドレットにパイプできます。
出力
System.Management.Automation.PSRemotingJob
このコマンドレットは、終了状態のジョブを表すジョブ オブジェクトを返します。 Timeout パラメーターの値を超えたために待機が終了した場合、 Wait-Job
はオブジェクトを返しません。
メモ
PowerShell には、 の次のエイリアスが Wait-Job
含まれています。
- すべてのプラットフォーム:
wjb
既定では、 Wait-Job
ジョブが次のいずれかの状態にある場合、待機を返すか終了します。
- 完了
- 失敗
- 停止済み
- Suspended
- [Disconnected](切断済み)
中断されたジョブと切断されたジョブの待機を続行するように指示 Wait-Job
するには、 Force パラメーターを使用します。