Windows PowerShell でのバックグラウンドジョブ ~ その4 親ジョブと子ジョブ~

PowerShellで実行されるジョブには親子関係があります。

今回は

について説明します


親ジョブと子ジョブの確認

親子関係を確認する為に 、最初に次のコマンドを実行してみます。

このコマンドはローカルコンピュータとリモートコンピュータMyServ01に対し、Get-Serviceコマンドレットを実行します。

PS> $job = Invoke-Command localhost, MyServ01 -Command {Get-Service} -AsJob

この時点で次のようにGet-Jobコマンドレットを実行すると、1つのジョブが返されます。

1つのジョブでlocalhostとMyServ01に対して、コマンドが実行されていることがわかります。

PS> Get-Job
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 Job1 Completed True localhost,MyServ01 Get-Service

次に、下記のようにGet-Jobコマンドレットを使用して、もう少し詳しい情報を見てみましょう。(この確認方法はヘルプに載っています)

PS> Get-Job | Format-List -Property Name, ChildJobs 
Name      : Job1
ChildJobs : {Job2, Job3}

実行結果を見るとNameにJob1が、ChildJobsにJob2とJob3が記述されています。

これは、実際のジョブはJob2とJob3で実行されており、親ジョブであるJob1の管理下にあることを示しています。

次のように入力すれば、各子ジョブについて確認することができます。

PS> Get-Job Job2, Job3

Id              Name            State      HasMoreData     Location             Command
-- ---- ----- ----------- -------- -------
2 Job2 Completed True localhost Get-Service
3 Job3 Completed True MyServ01 Get-Service

 


子ジョブの管理

ジョブの親子関係がわかると、特定の子ジョブの実行結果を取得することが可能になります。

たとえば、先ほどの子ジョブであるJob2の実行結果を取得するのであれば

PS> Receive-Job -Id 2 -Keep

のように子ジョブのIDを指定することができます。

また、子ジョブは親ジョブに管理されていることから、次のようにRemeve-Jobコマンドレットを使用して親ジョブを削除すると、ぶら下がっているすべての子ジョブも削除されますので覚えておきましょう。

PS> Remove-Job -Id 1

コメント

タイトルとURLをコピーしました