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

PowerShellカテゴリを表すパンダのイラスト PowerShell

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

文書情報

記事タイトル
PowerShell バックグラウンドジョブとして実行した自作関数の進行状況をリアルタイムで把握する例
作成日
更新日
Source URL
https://papanda925.com/?p=1749

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

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