PowerShell バックグラウンドジョブとして実行した自作関数の進行状況をリアルタイムで把握する例

EXCEL

Receive-jobで進行状況を随時取得

 自作関数をStart-Jobを使ってバックグラウンド実行するなら、やはり進行状況はしりたいところだ。そこで、Receive-jobで進行状況を随時取得する例を作ってみた。

function DoTestFunction
{
    Write-output "TestFunction start"

    (1..10) | ForEach-Object { sleep 1;
         (date).ToString() 
    }
    Write-output "TestFunction End"   
}

#バックグラウンドジョブとして関数を実行
Write-Host "Background Job(DoTestFunction) Start"
$ScriptBlock = (Get-Command DoTestFunction).ScriptBlock
$job  =  Start-Job -ScriptBlock $ScriptBlock

sleep 1
#バックグラウンドジョブとして実行中の関数の処理状況(途中経過)を取得
while ($job.State -ne "Completed") {
    $Ret = Receive-job -Job $job    
    $Ret
    sleep 3
}

#バックグラウンドジョブとして実行完了した関数の処理結果を取得
$Ret = Receive-job -Job $job
$Ret

#バックグラウンドジョブとして実行完了した関数の後始末
remove-job -Job $job
Write-Host "Background Job(DoTestFunction) End"


 自作関数(DoTestFunction)は、1秒周期で10回日時を出力する。スクリプトのメインは、Start-Jobで自作関数をバックグラウンドプロセスとしてキックした後、プロセスが完了するまで3秒周期で処理結果を取得する。

実行結果

Background Job(DoTestFunction) Start
TestFunction start
2021/08/29 23:53:25
2021/08/29 23:53:26
2021/08/29 23:53:27
2021/08/29 23:53:28
2021/08/29 23:53:29
2021/08/29 23:53:30
2021/08/29 23:53:31
2021/08/29 23:53:32
2021/08/29 23:53:33
2021/08/29 23:53:34
TestFunction End
Background Job(DoTestFunction) End
ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

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