公開:
最終更新:
PowerShell Job系コマンド チートシート
目次
- ジョブの立ち上げ・確認・削除
- 基本書式と操作フロー
- 陥りがちな問題とその解法
- 構文パターン・ワンライナー例
- 高速化・一括制御TIPS
- 相対パス引き継ぎ
- ジョブ成功後に自動削除
- Start-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、または絶対パス渡しで回避 - ジョブがゴミとして残る
→-AutoRemoveJob/Remove-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
相対パス引き継ぎ
-
呼び出し元のパスを一度取得
$cwd = $pwd.Path -
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 | 結果取得後自動削除 |
-RunAs32 | 32bitプロセスとして実行 |
現場向けワンポイント
- ジョブはデフォルトで
$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