PowerShell Alias - wjb
 記事記号:[mdAc92] 初版:2010/Dec/28

この文書は、Windows PowerShellのヘルプ機能で表示される内容を再構成したものです。

名前
    Wait-Job
    
概要
    セッション内で実行中のいずれかまたはすべての Windows PowerShell バックグラン
    ド ジョブが完了するまで、コマンド プロンプトが表示されないようにします。
    
構文
    Wait-Job [[-InstanceId] <Guid[]>] [-Any] [-Timeout <int>] [<C
    ommonParameters>]
    
    Wait-Job [-Job] <Job[]> [-Any] [-Timeout <int>] [<CommonParam
    eters>]
    
    Wait-Job [[-Name] <string[]>] [-Any] [-Timeout <int>] [<Commo
    nParameters>]
    
    Wait-Job [-Id] <Int32[]> [-Any] [-Timeout <int>] [<CommonPara
    meters>]
    
    Wait-Job [-State {NotStarted | Running | Completed | Failed | Stopped | Bloc
    ked}] [-Any] [-Timeout <int>] [<CommonParameters>]
    
説明
    Wait-Job コマンドレットは、Windows PowerShell バックグランド ジョブが完了す
    るまで待機してから、コマンド プロンプトを表示します。いずれかのバックグラン
    ド ジョブまたはすべてのバックグランド ジョブが完了するまで待機するか、ジョブ
    の最大待機時間を設定できます。
    
    Wait-Job を使用して、Start-Job、または Invoke-Command の AsJob パラメーター
    を使用して開始されたバックグランド ジョブを取得できます。
    
    ジョブ内のコマンドが完了すると、Wait-Job はコマンド プロンプトを表示し、ジョ
    ブ オブジェクトを返します。そのため、パイプを使用してジョブ オブジェクトを別
    のコマンドに渡すことができます。
    
パラメーター
    -Any [<SwitchParameter>]
        ジョブが完了したときにコマンド プロンプトを表示します (また、ジョブ オブ
        ジェクトを返します)。既定では、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、Com
        pleted、Stopped、Failed、および Blocked です。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   true (ByPropertyName)
        ワイルドカード文字を許可する false
        
    -Timeout <int>
        各バックグラウンド ジョブの最大待機時間を秒単位で定義します。既定値は -1 
        で、ジョブの実行時間に関係なく、ジョブが完了するまで待機します。タイミン
        グは、Start-Job コマンドではなく、Wait-Job コマンドを送信したときに始ま
        ります。
        
        この時間を超えると、ジョブがまだ実行されていても、待機が終了し、コマンド 
        プロンプトに戻ります。エラー メッセージは表示されません。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    <CommonParameters>
        このコマンドレットは、次の共通パラメーターをサポートします: Verbose、
        Debug、ErrorAction、ErrorVariable、WarningAction、WarningVariable、
        OutBuffer、および OutVariable。詳細については、
        「get-help 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 -sc
    riptblock {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 -scrip
    tblock {$c}} -ArgumentList $c
    
    C:\PS> invoke-command -session $s -scriptblock {wait-job -any}
    
    説明
    -----------
    この例では、Wait-Job の Any パラメーターを使用して、現在のセッションで実行中
    の多数のバックグランド ジョブのうち、いずれかのバックグランド ジョブが最初に
    完了した時間を確認します。また、Wait-Job コマンドレットを使用して、リモート 
    ジョブが完了するまで待機する方法も示します。
    
    最初のコマンドは、Machines.txt ファイルに示されている各コンピューター上に PS
    Session を作成し、PSSession を $s 変数に保存します。このコマンドは、Get-Cont
    ent コマンドレットを使用してファイルの内容を取得します。Get-Content コマンド
    は、New-PSSession コマンドの前に確実に実行されるように、丸かっこで囲みます。
    
    2 番目のコマンドは、Get-EventLog コマンド文字列 (引用符内) を $c 変数に保存
    します。
    
    3 番目のコマンドは、Invoke-Command コマンドレットを使用して、$s に保存された
    各セッションで Start-Job コマンドを実行します。Start-Job コマンドは、$c に保
    存されたコマンドを実行するバックグラウンド ジョブを開始します。
    
    $c 変数はローカル コンピューター上に存在するため、コマンドは "param" キーワ
    ードを使用してローカル変数をコマンド内で宣言し、ArgumentList パラメーターを
    使用してこれらの変数の値を指定します。
    
    4 番目のコマンドは、Invoke-Command コマンドレットを使用して、セッションで Wa
    it-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 パラメーターに 3
    0 (秒) という値を指定して最大待機時間を設定し、コマンドの結果を $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 {$_las
    twritetime -gt ((get-date) - (new-timespan -days 7))}}
    
    C:\PS> $j | wait-job
    
    説明
    -----------
    この例では、Start-Job コマンドレットを使用してローカル コンピューター上で開
    始されたジョブに Wait-Job コマンドレットを使用する方法を示します。
    
    これらのコマンドは、過去 1 週間に追加または更新された Windows PowerShell ス
    クリプト ファイルを取得するジョブを開始します。
    
    最初のコマンドは、Start-Job コマンドレットを使用して、バックグラウンド ジョ
    ブをローカル コンピューター上で開始します。ジョブは、過去 1 週間に追加または
    更新され、".ps1" ファイル名拡張子を持つすべてのファイルを取得する Get-ChildI
    tem コマンドを実行します。
    
    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 であるジョブを待機します。
    
関連するリンク
    Online version: http://go.microsoft.com/fwlink/?LinkID=113422
    about_Jobs 
    about_Job_Details 
    about_Remote_Jobs 
    Start-Job 
    Get-Job 
    Receive-Job 
    Stop-Job 
    Remove-Job 
    Invoke-Command 
	
記事で解説しているパソコンの環境
 基本ソフト: Windows 7
 キーワード: Windows PowerShell、ヘルプ、Alias、wjb
ご利用数: 1973205
感想・要望・問い合わせは こちら