@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/2026/06/08/001-csharp-run-powershell-receive-objects/#article>
    schema:about <https://comcomponent.com/knowledge/powershell-sdk/>, <https://comcomponent.com/knowledge/psobject/> ;
    schema:mentions <https://comcomponent.com/knowledge/psobject-baseobject/>, <https://comcomponent.com/knowledge/psobject-properties/>, <https://comcomponent.com/knowledge/addcommand-addparameter/>, <https://comcomponent.com/knowledge/addscript/>, <https://comcomponent.com/knowledge/script-injection-risk/>, <https://comcomponent.com/knowledge/format-table/>, <https://comcomponent.com/knowledge/select-object/>, <https://comcomponent.com/knowledge/pscustomobject/>, <https://comcomponent.com/knowledge/invokeasync/>, <https://comcomponent.com/knowledge/begininvoke-endinvoke/>, <https://comcomponent.com/knowledge/pipeline-stop-api/>, <https://comcomponent.com/knowledge/pipelinestoppedexception/>, <https://comcomponent.com/knowledge/runspacepool/>, <https://comcomponent.com/knowledge/windows-powershell-5-1/>, <https://comcomponent.com/knowledge/erroraction-stop/>, <https://comcomponent.com/knowledge/process-based-powershell-invocation/>, <https://comcomponent.com/knowledge/csharp-side-result-processing/>, <https://comcomponent.com/knowledge/user-input-to-powershell/>, <https://comcomponent.com/knowledge/concurrent-powershell-execution/>, <https://comcomponent.com/knowledge/cancellable-pipeline-pattern/>, <https://comcomponent.com/knowledge/premature-cancellation-registration/>, <https://comcomponent.com/knowledge/cancellation-race-miss/>, <https://comcomponent.com/knowledge/cancellationtoken-dotnet/>, <https://comcomponent.com/knowledge/dotnet-framework/> .

<https://comcomponent.com/knowledge/powershell-sdk/> a skos:Concept ;
    skos:prefLabel "PowerShell SDK(System.Management.Automation.PowerShell)"@ja ;
    skos:definition "PowerShellのパイプラインをホストアプリ(C#など)のコードから組み立てて実行できる.NETのクラスで、実行結果を文字列ではなくPSObjectのコレクションとして受け取れる。"@ja ;
    skos:altLabel "PowerShellクラス"@ja ;
    skos:altLabel "Microsoft.PowerShell.SDK" ;
    ks:uses <https://comcomponent.com/knowledge/psobject/> ;
    ks:uses <https://comcomponent.com/knowledge/addcommand-addparameter/> ;
    ks:uses <https://comcomponent.com/knowledge/addscript/> ;
    ks:uses <https://comcomponent.com/knowledge/invokeasync/> ;
    ks:uses <https://comcomponent.com/knowledge/pipeline-stop-api/> ;
    ks:configuredBy <https://comcomponent.com/knowledge/erroraction-stop/> ;
    ks:recommendedFor <https://comcomponent.com/knowledge/csharp-side-result-processing/> .

<https://comcomponent.com/knowledge/psobject/> a skos:Concept ;
    skos:prefLabel "PSObject"@ja ;
    skos:definition "PowerShellが出力する値を包むラッパーオブジェクトで、元の.NETオブジェクト(BaseObject)とプロパティの集合(Properties)を保持する。"@ja .

<https://comcomponent.com/knowledge/addcommand-addparameter/> a skos:Concept ;
    skos:prefLabel "AddCommand/AddParameter"@ja ;
    skos:definition "PowerShellオブジェクトにコマンド名とパラメーターを順に追加してパイプラインを組み立てる、PowerShell SDKのメソッド群。渡した値はコード文字列としてではなくパラメーター値として扱われる。"@ja ;
    skos:broader <https://comcomponent.com/knowledge/powershell-sdk/> ;
    ks:recommendedFor <https://comcomponent.com/knowledge/user-input-to-powershell/> ;
    ks:prevents <https://comcomponent.com/knowledge/script-injection-risk/> .

<https://comcomponent.com/knowledge/addscript/> a skos:Concept ;
    skos:prefLabel "AddScript"@ja ;
    skos:definition "PowerShellのスクリプト文字列をそのままパイプラインに追加して実行する、PowerShell SDKのメソッド。"@ja ;
    skos:broader <https://comcomponent.com/knowledge/powershell-sdk/> .

<https://comcomponent.com/knowledge/csharp-side-result-processing/> a skos:Concept ;
    skos:prefLabel "C#側で結果を加工する処理"@ja ;
    skos:definition "PowerShellの実行結果をC#側でプロパティや型として扱い、画面表示や業務ロジックに使う処理。"@ja ;
    ks:uses <https://comcomponent.com/knowledge/psobject-baseobject/> ;
    ks:uses <https://comcomponent.com/knowledge/psobject-properties/> .

<https://comcomponent.com/knowledge/psobject-baseobject/> a skos:Concept ;
    skos:prefLabel "PSObject.BaseObject"@ja ;
    skos:definition "PSObjectが包んでいる、PowerShellが返した元の.NETオブジェクトそのものを取り出すプロパティ。"@ja ;
    skos:broader <https://comcomponent.com/knowledge/psobject/> .

<https://comcomponent.com/knowledge/psobject-properties/> a skos:Concept ;
    skos:prefLabel "PSObject.Properties"@ja ;
    skos:definition "Select-Objectや[pscustomobject]で整形した列など、PSObjectが持つプロパティの集合を名前で取り出すためのコレクション。"@ja ;
    skos:broader <https://comcomponent.com/knowledge/psobject/> .

<https://comcomponent.com/knowledge/format-table/> a skos:Concept ;
    skos:prefLabel "Format-Table/Format-List"@ja ;
    skos:definition "PowerShellの結果を画面表示用に整形するコマンドレットで、通すと結果が元のオブジェクトではなく表示用のフォーマット情報に変わる。"@ja ;
    skos:altLabel "Format-Table / Format-List" ;
    skos:altLabel "Format系コマンドレット"@ja ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/csharp-side-result-processing/> .

<https://comcomponent.com/knowledge/select-object/> a skos:Concept ;
    skos:prefLabel "Select-Object"@ja ;
    skos:definition "PowerShellのパイプラインで必要な列だけに絞り込むコマンドレットで、結果はオブジェクトのまま後続処理に渡せる。"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/csharp-side-result-processing/> .

<https://comcomponent.com/knowledge/pscustomobject/> a skos:Concept ;
    skos:prefLabel "[pscustomobject]"@ja ;
    skos:definition "PowerShellスクリプト側で複数の値を名前付きのプロパティとしてまとめて返すための構文。"@ja ;
    skos:altLabel "PSCustomObject" ;
    ks:recommendedFor <https://comcomponent.com/knowledge/csharp-side-result-processing/> .

<https://comcomponent.com/knowledge/user-input-to-powershell/> a skos:Concept ;
    skos:prefLabel "PowerShellへユーザー入力を渡す要件"@ja ;
    skos:definition "画面や引数から受け取ったユーザー入力の値を、PowerShellのコマンドへ安全に渡したいという要件。"@ja .

<https://comcomponent.com/knowledge/script-injection-risk/> a skos:Concept ;
    skos:prefLabel "スクリプト注入リスク"@ja ;
    skos:definition "ユーザー入力を文字列連結でAddScriptのスクリプトに埋め込んだ結果、その入力がPowerShellのコードとして解釈されてしまう可能性。"@ja .

<https://comcomponent.com/knowledge/invokeasync/> a skos:Concept ;
    skos:prefLabel "PowerShell.InvokeAsync"@ja ;
    skos:definition "PowerShellのパイプライン実行をTask<PSDataCollection<PSObject>>として返す、非同期実行用のメソッド。"@ja ;
    skos:broader <https://comcomponent.com/knowledge/powershell-sdk/> .

<https://comcomponent.com/knowledge/windows-powershell-5-1/> a skos:Concept ;
    skos:prefLabel "Windows PowerShell 5.1"@ja ;
    skos:definition "Windowsに標準で同梱されている、.NET Framework上に構築されたレガシー世代のPowerShell(5.1系)のランタイム。実行ファイルはpowershell.exeで、.NETアプリからはMicrosoft.PowerShell.5.1.ReferenceAssembliesを介して呼び出せる。"@ja ;
    skos:altLabel "Microsoft.PowerShell.5.1.ReferenceAssemblies" ;
    ks:incompatibleWith <https://comcomponent.com/knowledge/invokeasync/> ;
    ks:uses <https://comcomponent.com/knowledge/begininvoke-endinvoke/> .

<https://comcomponent.com/knowledge/begininvoke-endinvoke/> a skos:Concept ;
    skos:prefLabel "BeginInvoke/EndInvoke"@ja ;
    skos:definition "InvokeAsyncを持たない環境向けの、IAsyncResultベースの非同期パイプライン実行メソッドの組。"@ja ;
    skos:broader <https://comcomponent.com/knowledge/powershell-sdk/> .

<https://comcomponent.com/knowledge/dotnet-framework/> a skos:Concept ;
    skos:prefLabel ".NET Framework"@ja ;
    skos:definition "Windowsのコンポーネントとして扱われ、インストールされているOSのライフサイクルに沿ってサポートされるランタイム。System.Messagingの対象範囲。"@ja .

<https://comcomponent.com/knowledge/pipeline-stop-api/> a skos:Concept ;
    skos:prefLabel "パイプライン停止API(Stop/BeginStop/EndStop)"@ja ;
    skos:definition "実行中のPowerShellパイプラインを止めるためのAPI群。同期のStopは停止し終わるまで戻らず、非同期のBeginStop/EndStopはUIスレッドを待たせずに停止を要求できる。"@ja ;
    skos:altLabel "PowerShell.Stop" ;
    skos:altLabel "PowerShell.BeginStop" ;
    skos:broader <https://comcomponent.com/knowledge/powershell-sdk/> ;
    ks:mayCause <https://comcomponent.com/knowledge/pipelinestoppedexception/> .

<https://comcomponent.com/knowledge/pipelinestoppedexception/> a skos:Concept ;
    skos:prefLabel "PipelineStoppedException"@ja ;
    skos:definition "実行中のパイプラインが停止要求によって止められたときに、待機している呼び出しから投げられる例外。"@ja .

<https://comcomponent.com/knowledge/runspacepool/> a skos:Concept ;
    skos:prefLabel "RunspacePool"@ja ;
    skos:definition "複数のPowerShellインスタンスから使い回せる実行空間(Runspace)のプールで、並行実行の際にRunspaceの都度生成コストを避けられる。"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/concurrent-powershell-execution/> .

<https://comcomponent.com/knowledge/concurrent-powershell-execution/> a skos:Concept ;
    skos:prefLabel "複数のPowerShell処理を並行実行したい要件"@ja ;
    skos:definition "1台ずつの逐次処理では遅いため、複数のPowerShellコマンドを並行に実行したいという要件。"@ja .

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

<https://comcomponent.com/knowledge/process-based-powershell-invocation/> a skos:Concept ;
    skos:prefLabel "外部プロセスとしてのPowerShell起動"@ja ;
    skos:definition "ProcessStartInfoでpowershell.exe/pwsh.exeを外部プロセスとして起動し、標準出力・標準エラーを文字列として読み取る方法。"@ja ;
    skos:altLabel "ProcessStartInfoでpowershell.exe/pwsh.exeを起動"@ja ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/csharp-side-result-processing/> .

<https://comcomponent.com/knowledge/cancellable-pipeline-pattern/> a skos:Concept ;
    skos:prefLabel "CancellationTokenでパイプラインを安全に止める実装パターン"@ja ;
    skos:definition "パイプラインを起動した後にCancellationToken.Registerで停止(BeginStop/EndStop)を仕込み、停止の完了を待ってからPowerShellインスタンスを破棄する実装パターン。"@ja ;
    ks:uses <https://comcomponent.com/knowledge/pipeline-stop-api/> ;
    ks:uses <https://comcomponent.com/knowledge/cancellationtoken-dotnet/> ;
    ks:prevents <https://comcomponent.com/knowledge/cancellation-race-miss/> .

<https://comcomponent.com/knowledge/cancellationtoken-dotnet/> a skos:Concept ;
    skos:prefLabel "CancellationToken(.NET)"@ja ;
    skos:definition ".NETの協調的キャンセルの仕組み。非同期モードのハンドルへのファイルI/Oでは、内部的にCancelIoExの呼び出しに行き着く。"@ja ;
    skos:altLabel "CancellationToken" .

<https://comcomponent.com/knowledge/premature-cancellation-registration/> a skos:Concept ;
    skos:prefLabel "パイプライン起動より前のキャンセル登録"@ja ;
    skos:definition "CancellationToken.Registerによる停止コールバックの登録を、InvokeAsync等でパイプラインを起動するより前に行ってしまう実装。"@ja ;
    ks:mayCause <https://comcomponent.com/knowledge/cancellation-race-miss/> .

<https://comcomponent.com/knowledge/cancellation-race-miss/> a skos:Concept ;
    skos:prefLabel "登録と起動の間のキャンセル空振り"@ja ;
    skos:definition "キャンセル登録と実際のパイプライン起動の間に来たキャンセル要求が、まだ始まっていないパイプラインへのBeginStopとして空振りし、その後起動されたパイプラインを誰も止められなくなる問題。"@ja .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell-sdk/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/psobject/> ;
    schema:description "PowerShell SDKでパイプラインをInvokeした結果は、基本的にCollection<PSObject>やPSDataCollection<PSObject>として返る。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/api/system.management.automation.powershell> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell-sdk/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/addcommand-addparameter/> ;
    schema:description "PowerShellオブジェクトに対してAddCommandとAddParameterを呼ぶことで、コマンドとパラメーターを組み立てて実行する。"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/powershell/scripting/developer/hosting/adding-and-invoking-commands> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell-sdk/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/addscript/> ;
    schema:description "固定の短いスクリプトを実行する場合や、既存スクリプトを読み込む場合はAddScriptを使う。"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.management.automation.powershell.addscript> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/csharp-side-result-processing/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/psobject-baseobject/> ;
    schema:description "PowerShellが返した元の.NETオブジェクトをそのまま使いたい場合はBaseObjectを見る。"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/api/system.management.automation.psobject> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/csharp-side-result-processing/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/psobject-properties/> ;
    schema:description "Select-Objectや[pscustomobject]で整形した列を取り出したい場合はPropertiesを列名で参照する。"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/api/system.management.automation.psobject> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/format-table/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/csharp-side-result-processing/> ;
    schema:description "C#側で受け取る前にFormat-Table/Format-Listを使うと、結果が元のオブジェクトではなく表示用のフォーマット情報になり、プロパティとして値を取り出せなくなる。"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/format-table> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/select-object/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/csharp-side-result-processing/> ;
    schema:description "C#で後続処理に使う場合は、Format-Table系ではなくSelect-Objectで列を絞った結果を渡すのが推奨される。"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/select-object> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/pscustomobject/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/csharp-side-result-processing/> ;
    schema:description "複数の値をまとめて返したい場合は[pscustomobject]で整形すると、C#側でPropertiesから名前で値を取り出しやすい。"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/scripting/learn/deep-dives/everything-about-pscustomobject> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/addcommand-addparameter/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/user-input-to-powershell/> ;
    schema:description "PowerShellコマンドに値を渡す場合は、できるだけAddCommandとAddParameterを使うことが推奨される。"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/powershell/scripting/developer/hosting/adding-and-invoking-commands> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/addscript/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/script-injection-risk/> ;
    schema:description "ユーザー入力を文字列連結でAddScriptのスクリプトに埋め込むと、その入力がPowerShellのコードとして解釈される余地がある。"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.management.automation.powershell.addscript> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/addcommand-addparameter/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/script-injection-risk/> ;
    schema:description "AddParameterで渡した値はコード文字列として連結されるのではなくパラメーター値として扱われるため、スクリプト注入の余地がない。"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/powershell/scripting/developer/hosting/adding-and-invoking-commands> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell-sdk/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/invokeasync/> ;
    schema:description "現行の.NET向けPowerShell SDKでは、InvokeAsyncでパイプラインを非同期実行しそのままawaitできる。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/api/system.management.automation.powershell.invokeasync> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/windows-powershell-5-1/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/invokeasync/> ;
    schema:description "Windows PowerShell 5.1向けの参照アセンブリにはInvokeAsyncが無く、BeginInvoke/EndInvokeに分けて非同期化する必要がある。"@ja ;
    ks:evidence <https://www.nuget.org/packages/Microsoft.PowerShell.5.1.ReferenceAssemblies/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/windows-powershell-5-1/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/begininvoke-endinvoke/> ;
    schema:description "InvokeAsyncが使えないWindows PowerShell 5.1環境では、BeginInvoke/EndInvokeをTaskに包んで非同期化する。"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.management.automation.powershell.begininvoke> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet-framework/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/windows-powershell-5-1/> ;
    schema:description ".NET FrameworkのWinFormsやWPFアプリからPowerShellを呼ぶ場合は、Microsoft.PowerShell.5.1.ReferenceAssembliesを介してWindowsに同梱のWindows PowerShell 5.1を実行する。"@ja ;
    ks:evidence <https://www.nuget.org/packages/Microsoft.PowerShell.5.1.ReferenceAssemblies/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell-sdk/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/pipeline-stop-api/> ;
    schema:description "PowerShellの停止APIには同期のStop、非同期のBeginStop/EndStopがあり、UIスレッドから止める場合は非同期版を使う。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/api/system.management.automation.powershell.beginstop> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/pipeline-stop-api/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/pipelinestoppedexception/> ;
    schema:description "停止すると、待っているInvokeAsync/Invokeの呼び出しはPipelineStoppedExceptionを投げる。これは失敗ではなく正常な経路として扱う。"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.management.automation.pipelinestoppedexception> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/runspacepool/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/concurrent-powershell-execution/> ;
    schema:description "並行実行する数が増えるならRunspacePoolを用意し、PowerShellインスタンスはそこから使い回す。"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/powershell/scripting/developer/hosting/creating-multiple-runspaces> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell-sdk/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/concurrent-powershell-execution/> ;
    schema:description "1つのPowerShellインスタンスを複数スレッドで共有する場合に限り、実行中のインスタンスへ再度Invoke/InvokeAsyncを呼ぶと「コマンドが既に開始されている」という理由でInvalidOperationExceptionになる。RunspacePoolからインスタンスを1つずつ取り出して使う並行実行は本文が実演しているとおり問題ない"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/api/system.management.automation.powershell> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell-sdk/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/erroraction-stop/> ;
    schema:description "AddParameterでErrorActionにStopを指定すると、処理を続けるはずの非終了エラーも例外として扱えるようになる。"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_commonparameters> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/process-based-powershell-invocation/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/csharp-side-result-processing/> ;
    schema:description "標準出力を文字列として読む方法は表示形式(列幅・ロケール・区切り文字)に依存して壊れやすく、C#側で結果を加工する処理には向かない。"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.diagnostics.processstartinfo> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell-sdk/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/csharp-side-result-processing/> ;
    schema:description "C#側で結果を加工する処理、管理ツール、業務アプリでは、結果をPSObjectとして受け取れるPowerShell SDKの利用が推奨される。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/api/system.management.automation.powershell> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/cancellable-pipeline-pattern/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/pipeline-stop-api/> ;
    schema:description "安全にキャンセルする実装は、CancellationTokenのコールバックからBeginStop/EndStopを呼ぶ形でパイプライン停止APIを使う。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/api/system.management.automation.powershell.beginstop> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/cancellable-pipeline-pattern/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/cancellationtoken-dotnet/> ;
    schema:description "呼び出し側が途中で止められるように、パイプラインを起動するメソッドはCancellationTokenを受け取り、Registerで停止処理を仕込む。"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.threading.cancellationtoken.register> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/premature-cancellation-registration/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/cancellation-race-miss/> ;
    schema:description "CancellationToken.Registerは既にキャンセル済みのトークンだとその場でコールバックを実行するため、パイプライン起動より前に登録すると、まだ始まっていないパイプラインへBeginStopが空振りし、その後の起動を誰も止められなくなる。"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.threading.cancellationtoken.register> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/cancellable-pipeline-pattern/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/cancellation-race-miss/> ;
    schema:description "先にキャンセル済みかどうかを確認し、パイプラインを起動してから停止のコールバックを登録する順序にすることで、登録と起動の間のキャンセル空振りを防げる。"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.threading.cancellationtoken.register> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .
