トピック about_Job_Details 簡易説明 ローカル コンピューターおよびリモート コンピューターでのバックグラウンド ジョブの詳細について説 明します。 詳細説明 このトピックでは、バックグラウンド ジョブの概念、および Windows PowerShell でどのようにバッ クグラウンド ジョブが動作するかの技術情報について説明します。 このトピックは、「about_Jobs」および「about_Remote_Jobs」を補足するものです。 重要: Start-Job、または Invoke-Command の AsJob パラメーターを使用して開始するバックグラ ウンド ジョブは、Windows PowerShell リモート処理インフラストラクチャに依存しています。これ らの機能を使用するには、バックグラウンド ジョブがローカル コンピューターのみで実行される場合で も、Windows PowerShell がリモート処理用に構成されている必要があります。詳細については、 「about_Remote_Requirements」を参照してください。 バックグラウンド ジョブについて バックグラウンド ジョブは、コマンドまたは式を非同期的に実行します。バックグラウンド ジョブは、 コマンドレット、関数、スクリプト、またはその他のコマンドベースのタスクを実行できます。バックグ ラウンド ジョブは、時間のかかるコマンドを実行するように設計されていますが、バックグラウンド ジ ョブを使用すると、どのコマンドもバックグラウンドで実行できます。 同期コマンドが実行されている場合、コマンドが完了するまで、Windows PowerShell のコマンド プロン プトは表示されません。ただし、バックグラウンド ジョブによって Windows PowerShell プロンプトが 非表示になることはありません。バックグラウンド ジョブを開始するコマンドは、ジョブ オブジェクト を返します。すぐにプロンプトに戻るため、バックグラウンド ジョブを実行しながら他のタスクを実行 することができます。 ただし、バックグラウンド ジョブを開始すると、ジョブは直ちに実行されますが、その結果はすぐには 得られません。返されるジョブ オブジェクトには、ジョブに関する有用な情報が含まれています。ただ し、ジョブの結果は含まれません。ジョブの結果を取得するには、別のコマンドを実行する必要がありま す。また、ジョブの停止、ジョブが完了するまでの待機、およびジョブの削除を行うためのコマンドを実 行することもできます。 バックグラウンド ジョブのタイミングを他のコマンドとは無関係にするために、各バックグラウンド ジ ョブは、専用の Windows PowerShell 環境 ("セッション") で実行されます。ただし、これはジョブを実 行するためだけに作成して後で破棄する一時的な接続にすることも、または複数の関連のジョブまたはコ マンドの実行に使用する永続的なセッション (PSSession) にすることもできます。 ジョブ コマンドレットの使用 ローカル コンピューターでバックグラウンド ジョブを開始するには、Start-Job コマンドを使用しま す。Start-Job は、ジョブ オブジェクトを返します。Get-Job コマンドレットを使用すると、ローカル コンピューターで開始されたジョブを表すオブジェクトを取得することもできます。 ジョブの結果を取得するには、Receive-Job コマンドを使用します。ジョブが完了していない場合、 Receive-Job からは一部の結果が返されます。Wait-Job コマンドレットを使用すると、セッション で開始された 1 つまたはすべてのジョブが完了するまで、コマンド プロンプトが表示されないようにす ることもできます。 バックグラウンド ジョブを停止するには、Stop-Job コマンドレットを使用します。ジョブを削除する には、Remove-Job コマンドレットを使用します。 コマンドレットの動作の詳細については、各コマンドレットのヘルプ トピックおよび「about_Jobs」 を参照してください。 リモート コンピューターでのバックグラウンド ジョブの開始 ローカル コンピューターまたはリモート コンピューターで、バックグランド ジョブを作成および管理す ることができます。バックグラウンド ジョブをリモートで実行するには、Invoke-Command などのコ マンドレットの AsJob パラメーターを使用するか、または Invoke-Command コマンドレットを使用 して Start-Job コマンドをリモートで実行します。対話型のセッションでバックグラウンド ジョブを 開始することもできます。 リモート バックグラウンド ジョブの詳細については、「about_Remote_Jobs」を参照してください。 子ジョブ 各バックグラウンド ジョブは、親ジョブと 1 つ以上の子ジョブから構成されています。Start-Job を使用して、または Invoke-Command の AsJob パラメーターを使用して開始されたジョブでは、親ジョブ はエグゼクティブになります。この親ジョブはコマンドを実行せず、結果を返しません。コマンドは、実 際には子ジョブによって実行されるためです (他のコマンドレットを使用して開始したジョブでは、異な る動作になることがあります)。 子ジョブは、親ジョブ オブジェクトの ChildJobs プロパティに保存されます。ChildJobs プロパ ティには、1 つ以上の子ジョブ オブジェクトを含めることができます。子ジョブ オブジェクトには、親 ジョブとは違う名前、ID、およびインスタンス ID があるため、親ジョブと子ジョブは個々に、または まとめて管理することができます。 ジョブ内の親ジョブと子ジョブを表示するには、次のコマンドに示すように、Get-Job コマンドレット を使用して親ジョブを取得し、次にこのジョブをパイプを介して Format-List コマンドに渡します。こ れにより、オブジェクトの Name プロパティおよび ChildJobs プロパティが表示されます。 C:\PS> get-job | format-list -property Name, ChildJobs Name : Job1 ChildJobs : {Job2} 次のコマンドに示すように、子ジョブに Get-Job コマンドを使用することもできます。 C:\PS> get-job job2 Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 2 Job2 Completed True localhost get-process 子ジョブの構成は、ジョブの開始に使用するコマンドによって異なります。 -- ローカル コンピューターで Start-Job を使用してジョブを開始する場合、ジョブは、エグゼ クティブである親ジョブと、コマンドを実行する子ジョブから構成されます。 -- 1 台以上のコンピューターで Invoke-Command の AsJob パラメーターを使用してジョブを開始 する場合、ジョブは、コンピューターごとに実行されるジョブごとに、エグゼクティブである親ジ ョブと子ジョブから構成されます。 -- 1 台以上のリモート コンピューターで Invoke-Command を使用して Start-Job コマンド を実行する場合、結果は、各リモート コンピューターでローカル コマンドを実行した場合と同じ になります。このコマンドは、コンピューターごとにジョブ オブジェクトを返します。ジョブ オ ブジェクトは、エグゼクティブ親ジョブと、コマンドを実行する 1 つの子ジョブから構成されます。 親ジョブは、すべての子ジョブを表しています。親ジョブを管理すると、関連する子ジョブも管理すること になります。たとえば、親ジョブを停止すると、すべての子ジョブも停止します。親ジョブの結果を取得すると、 すべての子ジョブの結果も取得されます。 ただし、子ジョブは個々に管理することもできます。この方法が最も便利なのは、ジョブに関する問題を 調べる場合、または Invoke-Command の AsJob パラメーターを使用して開始した多くの子ジョブのうち 1 つのみの結果を取得する場合です (バッククォート文字 (`) は連結文字です)。 次のコマンドは、Invoke-Command の AsJob パラメーターを使用して、ローカル コンピューターおよび 2 台のリモート コンピューターでバックグラウンド ジョブを開始します。このコマンドは、ジョブを $j 変数に保存します。 C:\PS> $j = invoke-command -computername localhost, Server01, Server02 ` -command {get-date} -AsJob $j 内のジョブの Name プロパティおよび ChildJob プロパティを表示すると、コマンドによってコ ンピューターごとに、ジョブ オブジェクトと 3 つの子ジョブが返されたことが示されます。 C:\PS> $j | format-list name, childjobs Name : Job3 ChildJobs : {Job4, Job5, Job6} 親ジョブを表示すると、ジョブが失敗したことが示されます。 C:\PS> $j Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 1 Job3 Failed True localhost,server... get-date ただし、子ジョブごとに Get-Job コマンドを実行すると、1 つの子ジョブのみが失敗したことが示され ます。 PS C:\ps-test> get-job job4, job5, job6 Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 4 Job4 Completed True localhost get-date 5 Job5 Failed False Server01 get-date 6 Job6 Completed True Server02 get-date すべての子ジョブの結果を取得するには、Receive-Job コマンドレットを使用して親ジョブの結果を取 得します。ただし、次のコマンドに示すように、特定の子ジョブの結果を取得することもできます。 C:\PS> receive-job -job6 -keep | format-table ComputerName, DateTime -auto ComputerName DateTime ------------ -------- Server02 Thursday, March 13, 2008 4:16:03 PM Windows PowerShell バックグラウンド ジョブの子ジョブの機能によって、実行するジョブをさらに 詳細に制御することができます。 関連項目 about_Jobs about_Remote_Jobs about_Remote Invoke-Command Start-Job Get-Job Wait-Job Stop-Job Remove-Job New-PSSession Enter-PSSession Exit-PSSession