知識マップ: 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を、冪等な処理設計と指数バックオフの上限つきで行うことで、無人実行に耐えるスクリプトになります。
flowchart LR
accTitle: PowerShellのエラー処理とリトライ設計の知識マップ
accDescr: 非終了エラーと終了エラーの違い、ErrorAction Stopによる昇格、ネイティブコマンドの成否判定と終了コード、PowerShell 7.4の新機能、局所的なretryが冪等な処理設計・一時的な障害・指数バックオフと持つ関係を示す図
non_terminating_error["非終了エラー"]
limited_retry["局所的なretry"]
powershell["PowerShell"]
powershell_try_catch["PowerShellのtry/catch"]
terminating_error["終了エラー(ステートメント終了/スクリプト終了)"]
erroraction_stop["ErrorAction Stop"]
silent_failure_risk["失敗の握りつぶしリスク"]
native_command["ネイティブコマンド(外部プログラム)"]
exit_code["終了コード(exit code)"]
ps_native_command_use_erroraction_preference["$PSNativeCommandUseErrorActionPreference"]
robocopy["robocopy"]
task_scheduler["タスクスケジューラの無人実行"]
idempotent_processing["idempotency(冪等性)を前提にした処理"]
transient_failure["一時的な障害"]
permanent_error["恒久的エラー(業務エラー)"]
exponential_backoff["指数バックオフ"]
powershell -->|"利用する"| powershell_try_catch
powershell_try_catch -->|"前提とする"| terminating_error
non_terminating_error -.->|"両立しない"| powershell_try_catch
powershell_try_catch -.->|"前提とする"| erroraction_stop
non_terminating_error -.->|"原因になり得る"| silent_failure_risk
erroraction_stop -->|"防止する"| silent_failure_risk
native_command -.->|"両立しない"| powershell_try_catch
native_command -->|"で確認できる"| exit_code
native_command -.->|"原因になり得る"| silent_failure_risk
ps_native_command_use_erroraction_preference -->|"前提とする"| erroraction_stop
ps_native_command_use_erroraction_preference -.->|"防止する"| silent_failure_risk
powershell -->|"利用する"| robocopy
robocopy -->|"で確認できる"| exit_code
exit_code -->|"で確認できる"| task_scheduler
limited_retry -->|"前提とする"| idempotent_processing
limited_retry -->|"軽減する"| transient_failure
limited_retry -->|"用いるのは非推奨"| permanent_error
limited_retry -->|"利用する"| exponential_backoff
概念間の関係(全18件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- PowerShellはPowerShellのtry/catchを利用します。
- PowerShellのtry/catchは終了エラー(ステートメント終了/スクリプト終了)を前提とします。
- 非終了エラーはPowerShellのtry/catchと両立しません。
- PowerShellのtry/catchはErrorAction Stopを前提とします。
- 非終了エラーは失敗の握りつぶしリスクの原因になることがあります。
- ErrorAction Stopは失敗の握りつぶしリスクを防ぎます。
- ネイティブコマンド(外部プログラム)はPowerShellのtry/catchと両立しません。
- ネイティブコマンド(外部プログラム)は終了コード(exit code)で確認できます。
- ネイティブコマンド(外部プログラム)は失敗の握りつぶしリスクの原因になることがあります。
- $PSNativeCommandUseErrorActionPreferenceはErrorAction Stopを前提とします。
- $PSNativeCommandUseErrorActionPreferenceは失敗の握りつぶしリスクを防ぎます。
- PowerShellはrobocopyを利用します。
- robocopyは終了コード(exit code)で確認できます。
- 終了コード(exit code)はタスクスケジューラの無人実行で確認できます。
- 局所的なretryはidempotency(冪等性)を前提にした処理を前提とします。
- 局所的なretryは一時的な障害を軽減します。
- 局所的なretryを恒久的エラー(業務エラー)に用いることは推奨されません。
- 局所的なretryは指数バックオフを利用します。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。