@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-com-dotnet-interop/#article>
    schema:about <https://comcomponent.com/knowledge/powershell/>, <https://comcomponent.com/knowledge/com/>, <https://comcomponent.com/knowledge/dotnet/> ;
    schema:mentions <https://comcomponent.com/knowledge/dotnet-framework/>, <https://comcomponent.com/knowledge/add-type/>, <https://comcomponent.com/knowledge/p-invoke/>, <https://comcomponent.com/knowledge/new-object-comobject/>, <https://comcomponent.com/knowledge/wscript-shell/>, <https://comcomponent.com/knowledge/rcw/>, <https://comcomponent.com/knowledge/release-com-object/>, <https://comcomponent.com/knowledge/excel-com-automation/>, <https://comcomponent.com/knowledge/excel-com-process-residue/>, <https://comcomponent.com/knowledge/ziparchive-api/>, <https://comcomponent.com/knowledge/task-scheduler/>, <https://comcomponent.com/knowledge/progid/>, <https://comcomponent.com/knowledge/com-apartment-model/>, <https://comcomponent.com/knowledge/pinvoke-signature-risk/>, <https://comcomponent.com/knowledge/powershell-7/>, <https://comcomponent.com/knowledge/windows-powershell-5-1/> .

<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/com/> ;
    ks:uses <https://comcomponent.com/knowledge/add-type/> ;
    ks:uses <https://comcomponent.com/knowledge/new-object-comobject/> .

<https://comcomponent.com/knowledge/com/> a skos:Concept ;
    skos:prefLabel "COM(コンポーネントオブジェクトモデル)"@ja ;
    skos:definition "公開インターフェース、レジストリ登録、Apartment Modelなどを土台にした、Windowsのバイナリ互換コンポーネントモデル。"@ja ;
    skos:altLabel "Component Object Model" .

<https://comcomponent.com/knowledge/dotnet/> a skos:Concept ;
    skos:prefLabel ".NET(Core以降)"@ja ;
    skos:definition ".NET Frameworkの後継となる、クロスプラットフォーム対応の.NETランタイム(.NET 5以降)。"@ja ;
    skos:altLabel ".NET Core" ;
    skos:altLabel "モダンな.NET"@ja ;
    ks:succeeds <https://comcomponent.com/knowledge/dotnet-framework/> .

<https://comcomponent.com/knowledge/powershell-7/> a skos:Concept ;
    skos:prefLabel "PowerShell 7"@ja ;
    skos:definition "PowerShell Core系譜の最新世代で、.NET(Core以降)上に構築されたPowerShellのエディション。実行ファイルはpwsh.exeで5.1のpowershell.exeとサイドバイサイドに共存し、Out-File・Set-Content・Export-Csvなどの既定書き込みencodingはBOMなしUTF-8である。"@ja ;
    ks:uses <https://comcomponent.com/knowledge/dotnet/> .

<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:uses <https://comcomponent.com/knowledge/dotnet-framework/> .

<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/add-type/> a skos:Concept ;
    skos:prefLabel "Add-Type"@ja ;
    skos:definition "C#のソースコードをその場でコンパイルしてPowerShellのセッションに型として追加できるコマンドレット。DllImportを渡せばP/InvokeでWin32 APIも呼び出せる。"@ja ;
    ks:implements <https://comcomponent.com/knowledge/p-invoke/> .

<https://comcomponent.com/knowledge/p-invoke/> a skos:Concept ;
    skos:prefLabel "P/Invoke"@ja ;
    skos:definition "C#などの.NETコードからアンマネージドなC関数群を呼び出すための、.NETの標準的な相互運用機構。"@ja ;
    skos:altLabel "Platform Invoke" ;
    skos:altLabel "P/Invoke(Platform Invoke)" ;
    skos:altLabel "DllImport" .

<https://comcomponent.com/knowledge/new-object-comobject/> a skos:Concept ;
    skos:prefLabel "New-Object -ComObject"@ja ;
    skos:definition "ProgIDを指定してCOMオブジェクトのインスタンスを作成するNew-Objectコマンドレットの使い方。VBScriptのCreateObjectに相当する。"@ja ;
    ks:requires <https://comcomponent.com/knowledge/progid/> ;
    ks:mayCause <https://comcomponent.com/knowledge/rcw/> .

<https://comcomponent.com/knowledge/progid/> a skos:Concept ;
    skos:prefLabel "ProgID(Programmatic Identifier)"@ja ;
    skos:definition "CLSIDに付けた、人が読める文字列の名前。`Excel.Application`のような形でCLSIDに対応付けられる。"@ja ;
    skos:altLabel "Programmatic Identifier" ;
    skos:broader <https://comcomponent.com/knowledge/com/> .

<https://comcomponent.com/knowledge/wscript-shell/> a skos:Concept ;
    skos:prefLabel "WScript.Shell"@ja ;
    skos:definition "ショートカット作成などWindows Script Host(WSH)由来の操作を提供するCOMオブジェクト。New-Object -ComObjectから利用できる。"@ja ;
    skos:altLabel "WSHオブジェクト"@ja .

<https://comcomponent.com/knowledge/rcw/> a skos:Concept ;
    skos:prefLabel "RCW(Runtime Callable Wrapper)"@ja ;
    skos:definition ".NETがCOMオブジェクトを操作するために生成するプロキシ。COMインターフェイスポインターをキャッシュし、GCに回収されるときにCOMオブジェクトへの参照を解放する。"@ja ;
    skos:altLabel "Runtime Callable Wrapper" ;
    ks:mayCause <https://comcomponent.com/knowledge/excel-com-process-residue/> .

<https://comcomponent.com/knowledge/excel-com-automation/> a skos:Concept ;
    skos:prefLabel "Excel COM自動化(Excel COM Interop)"@ja ;
    skos:definition "C#などの外部プログラムからCOM経由でExcelアプリケーション本体を起動・操作する自動化方式。"@ja ;
    skos:altLabel "Excel Automation" ;
    skos:altLabel "Office Automation(Excel)" ;
    ks:uses <https://comcomponent.com/knowledge/new-object-comobject/> ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/task-scheduler/> ;
    ks:requires <https://comcomponent.com/knowledge/com-apartment-model/> .

<https://comcomponent.com/knowledge/excel-com-process-residue/> a skos:Concept ;
    skos:prefLabel "EXCEL.EXEのプロセス残留"@ja ;
    skos:definition "Quit()を呼んでもCOM参照(RCW)が残っているために、EXCEL.EXEなどのプロセスが終了せずに残り続ける状態。"@ja ;
    skos:altLabel "EXCEL.EXEが終了しない問題"@ja .

<https://comcomponent.com/knowledge/release-com-object/> a skos:Concept ;
    skos:prefLabel "Marshal.ReleaseComObject"@ja ;
    skos:definition "RCWの内部参照カウントをデクリメントし、0になった時点でRCWが握るCOM参照を即座に解放する.NETのAPI。公式には絶対に必要な場合にのみ使うことが推奨される。"@ja ;
    ks:requires <https://comcomponent.com/knowledge/rcw/> .

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

<https://comcomponent.com/knowledge/com-apartment-model/> a skos:Concept ;
    skos:prefLabel "COMアパートメントモデル(STA/MTA)"@ja ;
    skos:definition "どのスレッドからCOMコンポーネントを呼んでよいかを決める、COMのスレッドモデルの約束。"@ja ;
    skos:altLabel "STA" ;
    skos:altLabel "MTA" ;
    skos:altLabel "Single/Multi Threaded Apartment" ;
    skos:broader <https://comcomponent.com/knowledge/com/> .

<https://comcomponent.com/knowledge/ziparchive-api/> a skos:Concept ;
    skos:prefLabel "ZipFile/ZipArchive API"@ja ;
    skos:definition "ZIPアーカイブの作成・展開・読み取りを行う.NETのクラス群。Compress-Archive/Expand-Archiveコマンドレットの基盤でもあり、最大ファイルサイズ2GBの制限がある。"@ja ;
    skos:altLabel "System.IO.Compression.ZipFile" ;
    skos:altLabel "ZipArchiveクラス"@ja .

<https://comcomponent.com/knowledge/pinvoke-signature-risk/> a skos:Concept ;
    skos:prefLabel "P/Invokeシグネチャ誤りによるクラッシュ"@ja ;
    skos:definition "DllImportのシグネチャ(引数の型・文字セット・呼び出し規約)を誤ると、例外では済まずプロセスごと落ちることがあるP/Invoke呼び出し特有のリスク。"@ja .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell-7/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/dotnet/> ;
    schema:description "PowerShell 7は.NET(旧.NET Core)の上に構築されており、.NETクラスライブラリの型を直接呼び出せる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/scripting/whats-new/differences-from-windows-powershell> ;
    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/dotnet-framework/> ;
    schema:description "Windows PowerShell 5.1は.NET Framework 4.5系の上に構築されている"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/scripting/whats-new/differences-from-windows-powershell> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet/> ;
    rdf:predicate ks:succeeds ;
    rdf:object <https://comcomponent.com/knowledge/dotnet-framework/> ;
    schema:description ".NET(Core以降)は.NET Frameworkの後継となるクロスプラットフォームのランタイムであり、使える型やメソッドのオーバーロードが異なる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/scripting/whats-new/differences-from-windows-powershell> ;
    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/com/> ;
    schema:description "PowerShellはNew-Object -ComObjectでCOMオブジェクトを作成し、Excelなどを操作できる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/new-object> ;
    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/add-type/> ;
    schema:description "Add-TypeはC#のソースコードをその場でコンパイルしてPowerShellのセッションに型を追加する"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/add-type> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/add-type/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/p-invoke/> ;
    schema:description "Add-TypeにDllImport付きのC#シグネチャを渡すと、その場でコンパイルされてP/Invoke経由でWin32 APIを呼び出せるようになる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/add-type> ;
    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/new-object-comobject/> ;
    schema:description "COMオブジェクトはNew-Object -ComObject <ProgId>で作成する"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/new-object> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/new-object-comobject/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/progid/> ;
    schema:description "New-Object -ComObjectはProgIDを指定してCOMオブジェクトを作成する"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/new-object> ;
    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/wscript-shell/> ;
    schema:description "ショートカット作成などWSH由来のCOM資産を使いたい場合、WScript.ShellのようなCOMオブジェクトも、New-Object -ComObjectで同様に作成できる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/scripting/samples/creating-.net-and-com-objects--new-object-> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/new-object-comobject/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/rcw/> ;
    schema:description "New-Object -ComObjectでCOMオブジェクトを作成すると、.NET側にRCW(Runtime Callable Wrapper)というプロキシが作られる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/standard/native-interop/runtime-callable-wrapper> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/excel-com-automation/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/new-object-comobject/> ;
    schema:description "Excel COM操作は、New-Object -ComObject Excel.ApplicationでExcelアプリケーションオブジェクトを作成することから始まる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/new-object> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/excel-com-automation/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/excel-com-process-residue/> ;
    schema:description "Quit()を呼んでも、途中の中間オブジェクトのRCWなど参照が残っていると、EXCEL.EXEなどのプロセスが終了しないことがある"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/standard/native-interop/runtime-callable-wrapper> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/rcw/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/excel-com-process-residue/> ;
    schema:description "RCWが生きている限りCOM側の参照は解放されないため、参照が残るとプロセスが終了しない"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/standard/native-interop/runtime-callable-wrapper> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/release-com-object/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/excel-com-process-residue/> ;
    schema:description "finallyでQuit・Marshal.ReleaseComObjectによる解放・GCの実行までを行う後始末により、プロセスの残留を防げる(ただし2ドットルールを守って中間オブジェクトも変数で受け取っていること、QuitがExcelの応答なし等で失敗しないことが前提)"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.runtime.interopservices.marshal.releasecomobject> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/release-com-object/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/rcw/> ;
    schema:description "Marshal.ReleaseComObjectはRCWの参照カウントを減らし、0になった時点で基盤のCOMオブジェクトを解放する"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.runtime.interopservices.marshal.releasecomobject> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/excel-com-automation/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/task-scheduler/> ;
    schema:description "無人・非対話のタスクスケジューラのタスクやサービスからのExcel COM操作を、Microsoftは推奨せずサポートもしないと明言している"@ja ;
    ks:evidence <https://learn.microsoft.com/office/client-developer/integration/considerations-unattended-automation-office-microsoft-365-for-unattended-rpa> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/excel-com-automation/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/com-apartment-model/> ;
    schema:description "OfficeアプリケーションはSTA(シングルスレッドアパートメント)前提で作られており、1台のサーバーで同じ処理を並列に何本も走らせる使い方に構造的に向かない"@ja ;
    ks:evidence <https://learn.microsoft.com/office/client-developer/integration/considerations-unattended-automation-office-microsoft-365-for-unattended-rpa> ;
    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/ziparchive-api/> ;
    schema:description "展開せずに中身を確認するなど、Compress-Archive/Expand-Archiveでは足りない細かいZIP操作をしたい場合は、.NETのZipFile/ZipArchiveクラスを直接呼び出して行う"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.io.compression.zipfile> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ziparchive-api/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/add-type/> ;
    schema:description "ZipFileクラスを使うにはSystem.IO.Compression.FileSystemアセンブリへの参照が必要で、Windows PowerShell 5.1ではAdd-Typeによる明示ロードが必要になる場面が多い"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/add-type> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/p-invoke/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/pinvoke-signature-risk/> ;
    schema:description "DllImportのシグネチャ(引数の型、文字セット、呼び出し規約)を誤ると、例外では済まずプロセスごと落ちることがある"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/standard/native-interop/pinvoke> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .
