知識マップ: PowerShellのエラー処理と再実行設計 ── try/catchが効かない罠からexit code・リトライの定石まで

記事「PowerShellのエラー処理と再実行設計 ── try/catchが効かない罠からexit code・リトライの定石まで」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

PowerShellのエラーは、パイプラインを続行する非終了エラーと、その場で処理を止める終了エラーに分かれ、非終了エラーは既定のままではtry/catchで捕まえられません。捕まえたいコマンドにErrorAction Stopを付けて終了エラーへ昇格させることで、失敗を握りつぶしたまま正常終了する事故を防げます。robocopyやgitのようなネイティブコマンドはこの仕組みの外側にあり、成否は終了コード($LASTEXITCODE)で確認するのが基本で、PowerShell 7.4以降は$PSNativeCommandUseErrorActionPreferenceと組み合わせてtry/catchに乗せることもできます。成否は最終的に終了コードとしてタスクスケジューラへ伝え、一時的な障害に限り局所的なretryを、冪等な処理設計と指数バックオフの上限つきで行うことで、無人実行に耐えるスクリプトになります。

PowerShellのエラー処理とリトライ設計の知識マップ非終了エラーと終了エラーの違い、ErrorAction Stopによる昇格、ネイティブコマンドの成否判定と終了コード、PowerShell 7.4の新機能、局所的なretryが冪等な処理設計・一時的な障害・指数バックオフと持つ関係を示す図利用する前提とする両立しない前提とする原因になり得る防止する両立しないで確認できる原因になり得る前提とする防止する利用するで確認できるで確認できる前提とする軽減する用いるのは非推奨利用する非終了エラー局所的なretryPowerShellPowerShellのtry/catch終了エラー(ステートメント終了/スクリプト終了)ErrorAction Stop失敗の握りつぶしリスクネイティブコマンド(外部プログラム)終了コード(exit code)$PSNativeCommandUseErrorActionPreferencerobocopyタスクスケジューラの無人実行idempotency(冪等性)を前提にした処理一時的な障害恒久的エラー(業務エラー)指数バックオフ

概念間の関係(全18件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

非終了エラー
コマンドレットが個々の入力の処理に失敗したときなどに発生する、パイプラインの実行を止めずに報告だけするPowerShellのエラー。既定ではtry/catchのcatchブロックに渡らない。
局所的なretry
一時的失敗と分かっている・冪等性がある・上限回数と待ち方が決まっている・失敗時の最終挙動が明確、という4条件が揃うときだけ外部I/O境界で行うretry。
PowerShell
オブジェクトパイプラインとエラー処理機構を持つ、Microsoftが最も堅牢で最新のWindows自動化に推奨するコマンドラインシェル兼スクリプト言語。
PowerShellのtry/catch
文終了エラーやスクリプト終了エラーを捕捉し、finallyで後始末を書けるPowerShellのエラー処理構文。
ErrorAction Stop
コマンドレットの共通パラメーターErrorActionにStopを指定し、処理を続けるはずの非終了エラーも例外(RuntimeException)として扱わせる指定。
ネイティブコマンド(外部プログラム)
robocopyやgit、社内EXEなど、PowerShellのエラーシステムに参加せず、既定では終了コードだけで結果を報告する外部プログラム。
$PSNativeCommandUseErrorActionPreference
PowerShell 7.4で正式機能になった設定で、$trueにするとネイティブコマンドの非ゼロ終了コードが$ErrorActionPreferenceに従う非終了エラーを発生させる(既定は$false)。
robocopy
リトライ(既定100万回)・ミラーリング・ログ機能を持つ、Windows標準のファイルコピー用コマンドラインツール。0〜8以上という独特の終了コード体系を持つ。
終了コード(exit code)
プロセスが終了時に返す整数値。bat側は%ERRORLEVEL%、PowerShell側はexitキーワードや$LASTEXITCODEで扱う。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。