@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/bat-to-powershell-migration-decision/#article>
    schema:about <https://comcomponent.com/knowledge/bat-file/>, <https://comcomponent.com/knowledge/powershell/> ;
    schema:mentions <https://comcomponent.com/knowledge/cmd-shell/>, <https://comcomponent.com/knowledge/vbscript/>, <https://comcomponent.com/knowledge/robocopy/>, <https://comcomponent.com/knowledge/execution-policy/>, <https://comcomponent.com/knowledge/exit-code/>, <https://comcomponent.com/knowledge/errorlevel-trap/>, <https://comcomponent.com/knowledge/bat-silent-failure/>, <https://comcomponent.com/knowledge/powershell-try-catch/>, <https://comcomponent.com/knowledge/whatif-parameter/>, <https://comcomponent.com/knowledge/pester/>, <https://comcomponent.com/knowledge/windows-automation/>, <https://comcomponent.com/knowledge/bat-powershell-wrapper/>, <https://comcomponent.com/knowledge/group-policy/> .

<https://comcomponent.com/knowledge/bat-file/> a skos:Concept ;
    skos:prefLabel "バッチファイル(bat)"@ja ;
    skos:definition "cmd.exeが解釈するコマンドを並べたスクリプトファイル。拡張子.batまたは.cmdを持つ。"@ja ;
    skos:altLabel "bat" ;
    skos:altLabel "cmdスクリプト"@ja ;
    ks:uses <https://comcomponent.com/knowledge/cmd-shell/> ;
    ks:mayCause <https://comcomponent.com/knowledge/bat-silent-failure/> ;
    ks:mayCause <https://comcomponent.com/knowledge/errorlevel-trap/> ;
    ks:uses <https://comcomponent.com/knowledge/exit-code/> .

<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:recommendedFor <https://comcomponent.com/knowledge/windows-automation/> ;
    ks:uses <https://comcomponent.com/knowledge/exit-code/> ;
    ks:uses <https://comcomponent.com/knowledge/robocopy/> ;
    ks:uses <https://comcomponent.com/knowledge/powershell-try-catch/> .

<https://comcomponent.com/knowledge/cmd-shell/> a skos:Concept ;
    skos:prefLabel "コマンドシェル(cmd.exe)"@ja ;
    skos:definition "Windowsに搭載される、batファイルなどのバッチスクリプトを実行する伝統的なコマンドラインシェル。"@ja ;
    skos:altLabel "cmd" ;
    skos:altLabel "コマンドプロンプト"@ja ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/windows-automation/> .

<https://comcomponent.com/knowledge/windows-automation/> a skos:Concept ;
    skos:prefLabel "Windowsの自動化"@ja ;
    skos:definition "コマンドやスクリプトによってWindows上の作業を自動化する用途領域。Microsoftは最も堅牢で最新の自動化にPowerShellの使用を推奨している。"@ja ;
    skos:altLabel "Windows automation" .

<https://comcomponent.com/knowledge/vbscript/> a skos:Concept ;
    skos:prefLabel "VBScript"@ja ;
    skos:definition "cscript/wscriptで実行される、2023年10月に非推奨が発表されたMicrosoftのスクリプト言語。今後のWindowsで要求時インストール化を経てOSから削除される計画が公開されている。"@ja ;
    skos:altLabel "VBS" ;
    skos:altLabel "cscript" ;
    skos:altLabel "wscript" ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/windows-automation/> .

<https://comcomponent.com/knowledge/bat-silent-failure/> a skos:Concept ;
    skos:prefLabel "batのエラー無停止(握りつぶし)"@ja ;
    skos:definition "cmdが既定でコマンド失敗時も次の行へ進み、判定を書かなければ失敗が検知されずに処理が続行されるbatの性質。"@ja .

<https://comcomponent.com/knowledge/errorlevel-trap/> a skos:Concept ;
    skos:prefLabel "%ERRORLEVEL%の罠"@ja ;
    skos:definition "if errorlevel Nが『N以上』の判定であることと、%errorlevel%が同名の環境変数を定義すると壊れるという、batの終了コード判定の落とし穴。"@ja ;
    skos:altLabel "if errorlevel" ;
    skos:altLabel "ERRORLEVEL環境変数の罠"@ja .

<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" .

<https://comcomponent.com/knowledge/bat-powershell-wrapper/> a skos:Concept ;
    skos:prefLabel "入口batからPowerShellを呼ぶ構成"@ja ;
    skos:definition "既存のbatをジョブ管理との接点として残しつつ、-Fileパラメーターで中身のPowerShellスクリプトを呼び出し、終了コードを引き継ぐ移行期の構成。"@ja ;
    skos:altLabel "混在期のラッパー構成"@ja ;
    ks:uses <https://comcomponent.com/knowledge/powershell/> ;
    ks:uses <https://comcomponent.com/knowledge/exit-code/> ;
    ks:uses <https://comcomponent.com/knowledge/bat-file/> .

<https://comcomponent.com/knowledge/execution-policy/> a skos:Concept ;
    skos:prefLabel "PowerShell実行ポリシー"@ja ;
    skos:definition "PowerShellスクリプトの実行可否と署名要求を制御する設定。既定はクライアントOSでRestricted、Windows ServerとPowerShell 7ではRemoteSigned。"@ja ;
    skos:altLabel "Execution Policy" ;
    skos:altLabel "RemoteSigned" .

<https://comcomponent.com/knowledge/group-policy/> a skos:Concept ;
    skos:prefLabel "グループポリシー"@ja ;
    skos:definition "Active Directoryドメイン環境でWindowsの設定を集中構成する仕組み。"@ja ;
    skos:altLabel "GPO" ;
    skos:altLabel "Group Policy" .

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

<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:mitigates <https://comcomponent.com/knowledge/bat-silent-failure/> .

<https://comcomponent.com/knowledge/whatif-parameter/> a skos:Concept ;
    skos:prefLabel "-WhatIfパラメーター"@ja ;
    skos:definition "システムやデータを変更するコマンドレットが提供する、実行せずに影響だけを表示する共通パラメーター。"@ja ;
    skos:altLabel "WhatIf" .

<https://comcomponent.com/knowledge/pester/> a skos:Concept ;
    skos:prefLabel "Pester"@ja ;
    skos:definition "PowerShellスクリプトの自動テストを書くためのテストフレームワーク。"@ja .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/bat-file/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/cmd-shell/> ;
    schema:description "batファイルはcmd.exeが解釈・実行するスクリプトファイルである"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-server/administration/windows-commands/windows-commands> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/cmd-shell/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/windows-automation/> ;
    schema:description "Microsoftは最も堅牢で最新のWindows自動化にはコマンド(cmd)やWindows Script HostではなくPowerShellの使用を推奨すると明記している"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-server/administration/windows-commands/windows-commands> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/vbscript/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/windows-automation/> ;
    schema:description "VBScriptは2023年10月に非推奨が正式発表され、要求時インストール化を経てOSから削除される計画が公開されており、新規の自動化用途には推奨されない"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/whats-new/deprecated-features> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/windows-automation/> ;
    schema:description "Microsoftの公式ドキュメントは最も堅牢で最新のWindows自動化にPowerShellの使用を推奨すると明記している"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-server/administration/windows-commands/windows-commands> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/bat-file/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/vbscript/> ;
    schema:description "batの一部はcscript/wscriptでVBScriptを呼び出す構成になっており、2000年代の定番パターンとして今も残っている"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/whats-new/deprecated-features> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/bat-file/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/bat-silent-failure/> ;
    schema:description "cmdは既定でコマンドが失敗しても次の行へ進むため、判定を書き忘れたbatの失敗は静かに握り潰される"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-server/administration/windows-commands/windows-commands> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/bat-file/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/errorlevel-trap/> ;
    schema:description "if errorlevel 1は『1以上』の判定であり、%errorlevel%は同名の環境変数を定義すると壊れるため、batの終了コード判定は誤りやすい"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-server/administration/windows-commands/if> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/bat-file/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/exit-code/> ;
    schema:description "batはexit /b <exitcode>でERRORLEVEL環境変数に終了コードを設定する"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-server/administration/windows-commands/exit> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/exit-code/> ;
    schema:description "PowerShellのexitキーワードは$LASTEXITCODEを設定し、pwsh -Fileで実行したスクリプトの終了コードは呼び出し元の%ERRORLEVEL%として観測される"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_language_keywords> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/bat-powershell-wrapper/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/powershell/> ;
    schema:description "入口batはpowershell.exeまたはpwshを-Fileパラメーターで呼び出し、%~dp0で自身のフォルダを解決する"@ja ;
    ks:evidence <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/bat-powershell-wrapper/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/exit-code/> ;
    schema:description "入口bat構成は終了コードをbatとPowerShellの間で引き継ぎ、既存のジョブ管理を保ったまま中身をPowerShell化できる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_language_keywords> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/execution-policy/> ;
    schema:description "PowerShellスクリプトの実行は実行ポリシーの制約を受ける。既定値は環境で異なり、Windows PowerShell 5.1のクライアントOSではRestricted(スクリプト実行不可)、Windows ServerとPowerShell 7ではRemoteSignedである。RemoteSignedの場合、インターネット由来のマーク付き未署名スクリプトはブロックされる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_execution_policies> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/execution-policy/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/group-policy/> ;
    schema:description "実行ポリシーの恒久的な統一はグループポリシーで行うのが本筋とされ、bat側で-ExecutionPolicy Bypassを付ける方法は管理者が構成したポリシーを弱めてしまう。ドメイン参加環境でグループポリシーを配布している場合に限る"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_execution_policies> ;
    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のような実績ある外部コマンドをそのまま呼び出せるため、Copy-Itemでの再実装は不要とされる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-server/administration/windows-commands/robocopy> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/robocopy/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/exit-code/> ;
    schema:description "robocopyは0〜8以上という独特の終了コード体系を持ち、8以上が失敗を意味するため$LASTEXITCODEでの判定が必要になる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-server/administration/windows-commands/robocopy> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] 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:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/bat-silent-failure/> ;
    schema:description "PowerShellのtry/catchはbatが起こしていた『エラーで止まらない』問題を構造的に解消する"@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/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/whatif-parameter/> ;
    schema:description "PowerShellの破壊的操作を行うコマンドレットのうち、SupportsShouldProcessを宣言してShouldProcessを呼ぶものに限り、-WhatIfで実行せずに影響を予告表示できる共通パラメーターを持つ。外部コマンドの呼び出しには自動では付かない"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_commonparameters> ;
    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/pester/> ;
    schema:description "移行したスクリプトを自動テストで守る場合、Pesterで『動くはず』を継続的に確認できる。自動テストを持たないスクリプトや、対話的に流すだけの用途では使わない。"@ja ;
    ks:evidence <https://pester.dev/docs/quick-start> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/bat-powershell-wrapper/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/bat-file/> ;
    schema:description "移行期の入口bat構成は既存のbatファイルをジョブ管理との接点として残し、中身だけをPowerShellに置き換える"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_pwsh> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .
