公開:

最終更新:

PowerShell Job系コマンド チートシート

目次


サクッと使えるジョブ制御・ノウハウまとめ

ジョブの立ち上げ・確認・削除

基本書式と操作フロー

# ジョブ開始
$job = Start-Job { コマンド... }

# ジョブ一覧
Get-Job

# ジョブ状態を絞り込み
Get-Job -State Running

# 完了・履歴取得
Receive-Job -Id $job.Id

# 結果と同時に削除
Receive-Job -Id $job.Id -Wait -AutoRemoveJob

# ジョブ削除
Remove-Job -Id $job.Id
# すべて削除
Get-Job | Remove-Job

陥りがちな問題とその解法

  • 相対パスが使えない
    → ScriptBlock先頭でSet-Location、または絶対パス渡しで回避
  • ジョブがゴミとして残る
    -AutoRemoveJobRemove-Jobで明示削除
  • 変数参照問題
    $using:構文を使い外側変数をScriptBlockへ受け渡し
  • ジョブのカレントディレクトリは$HOME等にリセットされる
    $cwd = $pwd.Path等で保存&渡す

構文パターン・ワンライナー例

# 独立した複数ジョブを一気に起動(全て合流不要)
$cwd = $pwd.Path
1..4 | ForEach-Object {
  $i = "{0:00}" -f $_
  Start-Job { Set-Location -Path $using:cwd; .\filter_csv.exe .\BIP1\$using:i.csv .\BIP1\$using:i`_f.csv }
}
# 実行後すべてのJobを削除
Get-Job | Remove-Job
  • $using:変数名で呼び出し元変数を安全に渡す
  • Set-Locationで起動時ディレクトリを指定

高速化・一括制御TIPS

  • 合流不要ならReceive-JobやWait-Jobは省略
  • 一括削除は Get-Job | Remove-Job
  • 使い捨て実行+自動削除は
Start-Job { ... } | Wait-Job; Get-Job | Receive-Job -AutoRemoveJob

相対パス引き継ぎ

  1. 呼び出し元のパスを一度取得

    $cwd = $pwd.Path
    
  2. ScriptBlockで明示セット

    Start-Job { Set-Location -Path $using:cwd; コマンド ... }
    

ジョブ成功後に自動削除

$job = Start-Job { ... }
Wait-Job -Id $job.Id
Receive-Job -Id $job.Id -AutoRemoveJob

または

Receive-Job -Id $job.Id -Wait -AutoRemoveJob

Start-Jobの主なパラメータまとめ

パラメータ用途
-ScriptBlock実行内容(必須)
-InitializationScript先に実行する初期化処理
-Nameジョブ名
-Credentialユーザー指定
-ArgumentList引数を配列で渡す
-FilePathスクリプトファイル指定
-InputObject$input自動変数で受け取る
-Authentication認証方式指定(リモート用)
-AutoRemoveJob結果取得後自動削除
-RunAs3232bitプロセスとして実行

現場向けワンポイント

  • ジョブはデフォルトで $HOME 下開始、pwd 維持にはSet-Location 必須
  • コマンドの中で変数値やパスを柔軟に扱う場合は$using:と絶対パス化が安全
  • コマンド終了の有無や状態を意識してジョブクリーンアップを徹底

リファレンス

https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/start-job?view=powershell-7.5 https://tex2e.github.io/blog/powershell/background-job