親ジョブと子ジョブ
PowerShellで実行されるジョブには親子関係があります。例えばInvoke-Commandコマンドレットを使用してlocalhostとHIRO-WIN7というリモートコンピュータにGet-Serviceコマンドレットを実行してみます(リスト10)。
$sess = Invoke-Command -ComputerName localhost, HIRO-WIN7 -Command {Get-Service} -AsJob
リスト10では2台のコンピューターに対してコマンドを実行していますが、Get-Jobコマンドレットを使用して、ジョブ情報を取得すると図6のように1件の情報しか返されないことが分かります。
実は、これは「親ジョブ」というもので、実際には1つ1つの子供のジョブ(以降、子ジョブ)に分かれています。
子ジョブを取得するには、Get-JobとFormat-Listコマンドレットを組み合わせてリスト11のように入力します(この確認方法はヘルプに載っています)。
Get-Job | Format-List -Property Name, ChildJobs
すると図7のようにNameに親ジョブのIDが、ChildNodesに子ジョブのIDが表示されます。
以上で、親ジョブのIDも子ジョブのIDも取得できますので、後は本記事で紹介したコマンドレットを使用して、ジョブ結果を取得することが可能です。
まとめ
今回紹介したバックグラウンドジョブは、専用のコマンドレットが準備されており、使用方法も難しいものではないことがお分かりいただけたかと思います。
このようにPowerShell 2.0では強力なコマンドレットが多く搭載されていますので、今後もこの連載を通じて紹介していきたいと思います。どうぞお楽しみに。