@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/powershell-error-handling-retry-design/#article>
    schema:about <https://comcomponent.com/knowledge/non-terminating-error/>, <https://comcomponent.com/knowledge/limited-retry/> ;
    schema:mentions <https://comcomponent.com/knowledge/powershell/>, <https://comcomponent.com/knowledge/terminating-error/>, <https://comcomponent.com/knowledge/erroraction-stop/>, <https://comcomponent.com/knowledge/powershell-try-catch/>, <https://comcomponent.com/knowledge/native-command/>, <https://comcomponent.com/knowledge/exit-code/>, <https://comcomponent.com/knowledge/ps-native-command-use-erroraction-preference/>, <https://comcomponent.com/knowledge/idempotent-processing/>, <https://comcomponent.com/knowledge/transient-failure/>, <https://comcomponent.com/knowledge/permanent-error/>, <https://comcomponent.com/knowledge/exponential-backoff/>, <https://comcomponent.com/knowledge/silent-failure-risk/>, <https://comcomponent.com/knowledge/robocopy/>, <https://comcomponent.com/knowledge/task-scheduler/> .

<https://comcomponent.com/knowledge/non-terminating-error/> a skos:Concept ;
    skos:prefLabel "非終了エラー"@ja ;
    skos:definition "コマンドレットが個々の入力の処理に失敗したときなどに発生する、パイプラインの実行を止めずに報告だけするPowerShellのエラー。既定ではtry/catchのcatchブロックに渡らない。"@ja ;
    skos:altLabel "non-terminating error" .

<https://comcomponent.com/knowledge/limited-retry/> a skos:Concept ;
    skos:prefLabel "局所的なretry"@ja ;
    skos:definition "一時的失敗と分かっている・冪等性がある・上限回数と待ち方が決まっている・失敗時の最終挙動が明確、という4条件が揃うときだけ外部I/O境界で行うretry。"@ja ;
    skos:altLabel "条件付きretry"@ja ;
    ks:requires <https://comcomponent.com/knowledge/idempotent-processing/> ;
    ks:mitigates <https://comcomponent.com/knowledge/transient-failure/> ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/permanent-error/> ;
    ks:uses <https://comcomponent.com/knowledge/exponential-backoff/> .

<https://comcomponent.com/knowledge/powershell/> a skos:Concept ;
    skos:prefLabel "PowerShell"@ja ;
    skos:definition "オブジェクトパイプラインとエラー処理機構を持つ、Microsoftが最も堅牢で最新のWindows自動化に推奨するコマンドラインシェル兼スクリプト言語。"@ja ;
    skos:altLabel "Windows PowerShell" ;
    skos:altLabel "pwsh" ;
    skos:altLabel "PowerShell 7" ;
    ks:uses <https://comcomponent.com/knowledge/powershell-try-catch/> ;
    ks:uses <https://comcomponent.com/knowledge/robocopy/> .

<https://comcomponent.com/knowledge/powershell-try-catch/> a skos:Concept ;
    skos:prefLabel "PowerShellのtry/catch"@ja ;
    skos:definition "文終了エラーやスクリプト終了エラーを捕捉し、finallyで後始末を書けるPowerShellのエラー処理構文。"@ja ;
    skos:altLabel "try/catch/finally" ;
    ks:requires <https://comcomponent.com/knowledge/terminating-error/> .

<https://comcomponent.com/knowledge/terminating-error/> a skos:Concept ;
    skos:prefLabel "終了エラー(ステートメント終了/スクリプト終了)"@ja ;
    skos:definition "その文だけ、または呼び出しスタック全体の実行を止めるPowerShellのエラーで、既定でtry/catchのcatchブロックに渡される。"@ja ;
    skos:altLabel "terminating error" ;
    skos:altLabel "ステートメント終了エラー"@ja ;
    skos:altLabel "スクリプト終了エラー"@ja .

<https://comcomponent.com/knowledge/erroraction-stop/> a skos:Concept ;
    skos:prefLabel "ErrorAction Stop"@ja ;
    skos:definition "コマンドレットの共通パラメーターErrorActionにStopを指定し、処理を続けるはずの非終了エラーも例外(RuntimeException)として扱わせる指定。"@ja ;
    ks:prevents <https://comcomponent.com/knowledge/silent-failure-risk/> .

<https://comcomponent.com/knowledge/silent-failure-risk/> a skos:Concept ;
    skos:prefLabel "失敗の握りつぶしリスク"@ja ;
    skos:definition "エラーが発生しているのに処理が続行・終了し、外部からは正常終了したように見えてしまう事故のリスク。"@ja ;
    skos:altLabel "握りつぶし"@ja .

<https://comcomponent.com/knowledge/native-command/> a skos:Concept ;
    skos:prefLabel "ネイティブコマンド(外部プログラム)"@ja ;
    skos:definition "robocopyやgit、社内EXEなど、PowerShellのエラーシステムに参加せず、既定では終了コードだけで結果を報告する外部プログラム。"@ja ;
    skos:altLabel "native command" ;
    ks:verifiedBy <https://comcomponent.com/knowledge/exit-code/> .

<https://comcomponent.com/knowledge/exit-code/> a skos:Concept ;
    skos:prefLabel "終了コード(exit code)"@ja ;
    skos:definition "プロセスが終了時に返す整数値。bat側は%ERRORLEVEL%、PowerShell側はexitキーワードや$LASTEXITCODEで扱う。"@ja ;
    skos:altLabel "ERRORLEVEL" ;
    skos:altLabel "$LASTEXITCODE" ;
    ks:verifiedBy <https://comcomponent.com/knowledge/task-scheduler/> .

<https://comcomponent.com/knowledge/ps-native-command-use-erroraction-preference/> a skos:Concept ;
    skos:prefLabel "$PSNativeCommandUseErrorActionPreference"@ja ;
    skos:definition "PowerShell 7.4で正式機能になった設定で、$trueにするとネイティブコマンドの非ゼロ終了コードが$ErrorActionPreferenceに従う非終了エラーを発生させる(既定は$false)。"@ja ;
    skos:altLabel "PSNativeCommandErrorActionPreference" ;
    ks:requires <https://comcomponent.com/knowledge/erroraction-stop/> .

<https://comcomponent.com/knowledge/robocopy/> a skos:Concept ;
    skos:prefLabel "robocopy"@ja ;
    skos:definition "リトライ(既定100万回)・ミラーリング・ログ機能を持つ、Windows標準のファイルコピー用コマンドラインツール。0〜8以上という独特の終了コード体系を持つ。"@ja ;
    ks:verifiedBy <https://comcomponent.com/knowledge/exit-code/> .

<https://comcomponent.com/knowledge/task-scheduler/> a skos:Concept ;
    skos:prefLabel "タスクスケジューラの無人実行"@ja ;
    skos:definition "指定したアカウントで、スケジュールやログオンなどのトリガーに従いプログラムを実行するWindowsの仕組み。ログオン種別(対話トークン・パスワード保存・S4Uなど)の設定によっては、ユーザーがログオンしていなくても実行できる。"@ja .

<https://comcomponent.com/knowledge/idempotent-processing/> a skos:Concept ;
    skos:prefLabel "idempotency(冪等性)を前提にした処理"@ja ;
    skos:definition "同じ入力をもう一度処理しても結果が変わらない性質を前提に、排他が破れた場合の二重実行を処理済み台帳への記録で吸収する設計。"@ja ;
    skos:altLabel "冪等な処理設計"@ja .

<https://comcomponent.com/knowledge/transient-failure/> a skos:Concept ;
    skos:prefLabel "一時的な障害"@ja ;
    skos:definition "接続先の瞬断・メンテナンス、スロットリング(429)、サーバーエラー(5xx)など、標準リトライで解決することが多い失敗の分類。"@ja .

<https://comcomponent.com/knowledge/permanent-error/> a skos:Concept ;
    skos:prefLabel "恒久的エラー(業務エラー)"@ja ;
    skos:definition "入力データ不正や権限不足、設定ミスなど、再試行しても結果が変わらないエラー。リトライの対象にせず、即時に失敗させ人に知らせるべき対象。"@ja ;
    skos:altLabel "permanent error" ;
    skos:altLabel "業務エラー"@ja .

<https://comcomponent.com/knowledge/exponential-backoff/> a skos:Concept ;
    skos:prefLabel "指数バックオフ"@ja ;
    skos:definition "再試行のたびに待機時間を段階的に広げていく再試行間隔の制御方式。障害中の相手への負荷集中を避ける。"@ja ;
    skos:altLabel "exponential backoff" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/powershell-try-catch/> ;
    schema:description "PowerShellはtry/catch/finally構文によるエラー処理をサポートする"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_try_catch_finally> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell-try-catch/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/terminating-error/> ;
    schema:description "catchブロックが処理を捕まえられるのは、対象が終了エラーである場合に限られる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_error_handling> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/non-terminating-error/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/powershell-try-catch/> ;
    schema:description "既定の設定のままでは、非終了エラーはtry/catch/finallyのcatchに渡らず、パイプラインの実行を続行する。-ErrorAction Stopや$ErrorActionPreference = \"Stop\"で終了エラーへ格上げすれば、catchで捕まえられる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_error_handling> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell-try-catch/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/erroraction-stop/> ;
    schema:description "非終了エラーを出すコマンドをcatchで確実に扱うには、そのコマンドへのErrorAction Stopの明示、または$ErrorActionPreference='Stop'の設定が前提になる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_error_handling> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/non-terminating-error/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/silent-failure-risk/> ;
    schema:description "非終了エラーを想定せずに書くと、エラーメッセージが出ているのに処理が続行し、外部からは正常終了したスクリプトに見えてしまうことがある"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_error_handling> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/erroraction-stop/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/silent-failure-risk/> ;
    schema:description "ErrorAction Stopや$ErrorActionPreference='Stop'を使えば、非終了エラーの時点で確実に停止させ、失敗を握りつぶしたまま正常終了する事故を防げる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_error_handling> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/native-command/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/powershell-try-catch/> ;
    schema:description "既定の設定のままでは、ネイティブコマンドの非ゼロ終了コードはErrorRecordを生成せず、try/catchのcatchには入らない。PowerShell 7.4以降で$PSNativeCommandUseErrorActionPreferenceを有効にし、$ErrorActionPreferenceをStopにすれば、非ゼロ終了はcatchできる終了エラーになる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_error_handling> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/native-command/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/exit-code/> ;
    schema:description "ネイティブコマンドの成否は終了コード($LASTEXITCODE)で確認できる。$?は終了コード0のときだけ$trueになる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_error_handling>, <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_automatic_variables> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/native-command/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/silent-failure-risk/> ;
    schema:description "ネイティブコマンドの失敗は既定でPowerShellのエラーにならないため、$LASTEXITCODEを確認しなければ失敗に気づかないまま処理が続くことがある"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_error_handling> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ps-native-command-use-erroraction-preference/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/erroraction-stop/> ;
    schema:description "$PSNativeCommandUseErrorActionPreferenceを$trueにしても、ネイティブコマンドの失敗をtry/catchで捕まえるには$ErrorActionPreference='Stop'と組み合わせる必要がある"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/scripting/whats-new/what-s-new-in-powershell-74>, <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_preference_variables> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ps-native-command-use-erroraction-preference/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/silent-failure-risk/> ;
    schema:description "非ゼロ終了コードを非終了エラーとして扱う設定とErrorAction Stopを組み合わせれば、ネイティブコマンドの失敗が気づかれないまま進む事故を防げる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/scripting/whats-new/what-s-new-in-powershell-74> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/robocopy/> ;
    schema:description "PowerShellはrobocopyのようなネイティブコマンド(外部プログラム)を呼び出せる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_error_handling> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/robocopy/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/exit-code/> ;
    schema:description "robocopyの成否は0〜7が成功系(コピーの有無等の情報)、8以上が失敗という独自の終了コード体系で確認できる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_error_handling> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/exit-code/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/task-scheduler/> ;
    schema:description "exitキーワードで設定した終了コードは、pwsh -File起動時にプロセスの終了コードとなり、タスクスケジューラの「前回の実行結果」で確認できる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_language_keywords>, <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_pwsh> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/limited-retry/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/idempotent-processing/> ;
    schema:description "リトライはタスクスケジューラの再実行も含め同じ処理がもう一度走ることを意味するため、二重処理にならない冪等な設計が前提になる"@ja ;
    ks:evidence <https://learn.microsoft.com/azure/architecture/patterns/retry> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/limited-retry/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/transient-failure/> ;
    schema:description "一時的な障害は時間の経過で解消しうるため、局所的なretryで自動的に吸収できる"@ja ;
    ks:evidence <https://learn.microsoft.com/azure/architecture/patterns/retry> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/limited-retry/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/permanent-error/> ;
    schema:description "入力不正や権限不足のような恒久的エラーは再試行しても結果が変わらないため、リトライの対象にすべきでない"@ja ;
    ks:evidence <https://learn.microsoft.com/azure/architecture/patterns/retry> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/limited-retry/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/exponential-backoff/> ;
    schema:description "再試行の間隔は指数バックオフで広げ、障害中の相手への負荷集中を避ける"@ja ;
    ks:evidence <https://learn.microsoft.com/azure/architecture/patterns/retry> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .
