PowerShell
type: Concept
definition: オブジェクトパイプラインとエラー処理機構を持つ、Microsoftが最も堅牢で最新のWindows自動化に推奨するコマンドラインシェル兼スクリプト言語。
alternative label: Windows PowerShell
alternative label: pwsh
alternative label: PowerShell 7
uses: COM(コンポーネントオブジェクトモデル)
uses: Add-Type
uses: New-Object -ComObject

COM(コンポーネントオブジェクトモデル)
type: Concept
definition: 公開インターフェース、レジストリ登録、Apartment Modelなどを土台にした、Windowsのバイナリ互換コンポーネントモデル。
alternative label: Component Object Model

.NET(Core以降)
type: Concept
definition: .NET Frameworkの後継となる、クロスプラットフォーム対応の.NETランタイム(.NET 5以降)。
alternative label: .NET Core
alternative label: モダンな.NET
succeeds: .NET Framework

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

Windows PowerShell 5.1
type: Concept
definition: Windowsに標準で同梱されている、.NET Framework上に構築されたレガシー世代のPowerShell(5.1系)のランタイム。実行ファイルはpowershell.exeで、.NETアプリからはMicrosoft.PowerShell.5.1.ReferenceAssembliesを介して呼び出せる。
alternative label: Microsoft.PowerShell.5.1.ReferenceAssemblies
uses: .NET Framework

.NET Framework
type: Concept
definition: Windowsのコンポーネントとして扱われ、インストールされているOSのライフサイクルに沿ってサポートされるランタイム。System.Messagingの対象範囲。

Add-Type
type: Concept
definition: C#のソースコードをその場でコンパイルしてPowerShellのセッションに型として追加できるコマンドレット。DllImportを渡せばP/InvokeでWin32 APIも呼び出せる。
implements: P/Invoke

P/Invoke
type: Concept
definition: C#などの.NETコードからアンマネージドなC関数群を呼び出すための、.NETの標準的な相互運用機構。
alternative label: Platform Invoke
alternative label: P/Invoke(Platform Invoke)
alternative label: DllImport

New-Object -ComObject
type: Concept
definition: ProgIDを指定してCOMオブジェクトのインスタンスを作成するNew-Objectコマンドレットの使い方。VBScriptのCreateObjectに相当する。
requires: ProgID(Programmatic Identifier)
may cause: RCW(Runtime Callable Wrapper)

ProgID(Programmatic Identifier)
type: Concept
definition: CLSIDに付けた、人が読める文字列の名前。`Excel.Application`のような形でCLSIDに対応付けられる。
alternative label: Programmatic Identifier
broader: COM(コンポーネントオブジェクトモデル)

WScript.Shell
type: Concept
definition: ショートカット作成などWindows Script Host(WSH)由来の操作を提供するCOMオブジェクト。New-Object -ComObjectから利用できる。
alternative label: WSHオブジェクト

RCW(Runtime Callable Wrapper)
type: Concept
definition: .NETがCOMオブジェクトを操作するために生成するプロキシ。COMインターフェイスポインターをキャッシュし、GCに回収されるときにCOMオブジェクトへの参照を解放する。
alternative label: Runtime Callable Wrapper
may cause: EXCEL.EXEのプロセス残留

Excel COM自動化(Excel COM Interop)
type: Concept
definition: C#などの外部プログラムからCOM経由でExcelアプリケーション本体を起動・操作する自動化方式。
alternative label: Excel Automation
alternative label: Office Automation(Excel)
uses: New-Object -ComObject
not recommended for: タスクスケジューラの無人実行
requires: COMアパートメントモデル(STA/MTA)

EXCEL.EXEのプロセス残留
type: Concept
definition: Quit()を呼んでもCOM参照(RCW)が残っているために、EXCEL.EXEなどのプロセスが終了せずに残り続ける状態。
alternative label: EXCEL.EXEが終了しない問題

Marshal.ReleaseComObject
type: Concept
definition: RCWの内部参照カウントをデクリメントし、0になった時点でRCWが握るCOM参照を即座に解放する.NETのAPI。公式には絶対に必要な場合にのみ使うことが推奨される。
requires: RCW(Runtime Callable Wrapper)

タスクスケジューラの無人実行
type: Concept
definition: 指定したアカウントで、スケジュールやログオンなどのトリガーに従いプログラムを実行するWindowsの仕組み。ログオン種別(対話トークン・パスワード保存・S4Uなど)の設定によっては、ユーザーがログオンしていなくても実行できる。

COMアパートメントモデル(STA/MTA)
type: Concept
definition: どのスレッドからCOMコンポーネントを呼んでよいかを決める、COMのスレッドモデルの約束。
alternative label: STA
alternative label: MTA
alternative label: Single/Multi Threaded Apartment
broader: COM(コンポーネントオブジェクトモデル)

ZipFile/ZipArchive API
type: Concept
definition: ZIPアーカイブの作成・展開・読み取りを行う.NETのクラス群。Compress-Archive/Expand-Archiveコマンドレットの基盤でもあり、最大ファイルサイズ2GBの制限がある。
alternative label: System.IO.Compression.ZipFile
alternative label: ZipArchiveクラス

P/Invokeシグネチャ誤りによるクラッシュ
type: Concept
definition: DllImportのシグネチャ(引数の型・文字セット・呼び出し規約)を誤ると、例外では済まずプロセスごと落ちることがあるP/Invoke呼び出し特有のリスク。

subject: PowerShell 7
predicate: uses
object: .NET(Core以降)
description: PowerShell 7は.NET(旧.NET Core)の上に構築されており、.NETクラスライブラリの型を直接呼び出せる
evidence: differences-from-windows-powershell
verified at: 2026-08-01
certainty: established

subject: Windows PowerShell 5.1
predicate: uses
object: .NET Framework
description: Windows PowerShell 5.1は.NET Framework 4.5系の上に構築されている
evidence: differences-from-windows-powershell
verified at: 2026-08-01
certainty: established

subject: .NET(Core以降)
predicate: succeeds
object: .NET Framework
description: .NET(Core以降)は.NET Frameworkの後継となるクロスプラットフォームのランタイムであり、使える型やメソッドのオーバーロードが異なる
evidence: differences-from-windows-powershell
verified at: 2026-08-01
certainty: established

subject: PowerShell
predicate: uses
object: COM(コンポーネントオブジェクトモデル)
description: PowerShellはNew-Object -ComObjectでCOMオブジェクトを作成し、Excelなどを操作できる
evidence: new-object
verified at: 2026-08-01
certainty: established

subject: PowerShell
predicate: uses
object: Add-Type
description: Add-TypeはC#のソースコードをその場でコンパイルしてPowerShellのセッションに型を追加する
evidence: add-type
verified at: 2026-08-01
certainty: established

subject: Add-Type
predicate: implements
object: P/Invoke
description: Add-TypeにDllImport付きのC#シグネチャを渡すと、その場でコンパイルされてP/Invoke経由でWin32 APIを呼び出せるようになる
evidence: add-type
verified at: 2026-08-01
certainty: established

subject: PowerShell
predicate: uses
object: New-Object -ComObject
description: COMオブジェクトはNew-Object -ComObject <ProgId>で作成する
evidence: new-object
verified at: 2026-08-01
certainty: established

subject: New-Object -ComObject
predicate: requires
object: ProgID(Programmatic Identifier)
description: New-Object -ComObjectはProgIDを指定してCOMオブジェクトを作成する
evidence: new-object
verified at: 2026-08-01
certainty: established

subject: PowerShell
predicate: uses
object: WScript.Shell
description: ショートカット作成などWSH由来のCOM資産を使いたい場合、WScript.ShellのようなCOMオブジェクトも、New-Object -ComObjectで同様に作成できる
evidence: creating-.net-and-com-objects--new-object-
verified at: 2026-08-01
certainty: context-dependent

subject: New-Object -ComObject
predicate: mayCause
object: RCW(Runtime Callable Wrapper)
description: New-Object -ComObjectでCOMオブジェクトを作成すると、.NET側にRCW(Runtime Callable Wrapper)というプロキシが作られる
evidence: runtime-callable-wrapper
verified at: 2026-08-01
certainty: established

subject: Excel COM自動化(Excel COM Interop)
predicate: uses
object: New-Object -ComObject
description: Excel COM操作は、New-Object -ComObject Excel.ApplicationでExcelアプリケーションオブジェクトを作成することから始まる
evidence: new-object
verified at: 2026-08-01
certainty: established

subject: Excel COM自動化(Excel COM Interop)
predicate: mayCause
object: EXCEL.EXEのプロセス残留
description: Quit()を呼んでも、途中の中間オブジェクトのRCWなど参照が残っていると、EXCEL.EXEなどのプロセスが終了しないことがある
evidence: runtime-callable-wrapper
verified at: 2026-08-01
certainty: context-dependent

subject: RCW(Runtime Callable Wrapper)
predicate: mayCause
object: EXCEL.EXEのプロセス残留
description: RCWが生きている限りCOM側の参照は解放されないため、参照が残るとプロセスが終了しない
evidence: runtime-callable-wrapper
verified at: 2026-08-01
certainty: established

subject: Marshal.ReleaseComObject
predicate: prevents
object: EXCEL.EXEのプロセス残留
description: finallyでQuit・Marshal.ReleaseComObjectによる解放・GCの実行までを行う後始末により、プロセスの残留を防げる(ただし2ドットルールを守って中間オブジェクトも変数で受け取っていること、QuitがExcelの応答なし等で失敗しないことが前提)
evidence: system.runtime.interopservices.marshal.releasecomobject
verified at: 2026-08-01
certainty: context-dependent

subject: Marshal.ReleaseComObject
predicate: requires
object: RCW(Runtime Callable Wrapper)
description: Marshal.ReleaseComObjectはRCWの参照カウントを減らし、0になった時点で基盤のCOMオブジェクトを解放する
evidence: system.runtime.interopservices.marshal.releasecomobject
verified at: 2026-08-01
certainty: established

subject: Excel COM自動化(Excel COM Interop)
predicate: notRecommendedFor
object: タスクスケジューラの無人実行
description: 無人・非対話のタスクスケジューラのタスクやサービスからのExcel COM操作を、Microsoftは推奨せずサポートもしないと明言している
evidence: considerations-unattended-automation-office-microsoft-365-for-unattended-rpa
verified at: 2026-08-01
certainty: established

subject: Excel COM自動化(Excel COM Interop)
predicate: requires
object: COMアパートメントモデル(STA/MTA)
description: OfficeアプリケーションはSTA(シングルスレッドアパートメント)前提で作られており、1台のサーバーで同じ処理を並列に何本も走らせる使い方に構造的に向かない
evidence: considerations-unattended-automation-office-microsoft-365-for-unattended-rpa
verified at: 2026-08-01
certainty: established

subject: PowerShell
predicate: uses
object: ZipFile/ZipArchive API
description: 展開せずに中身を確認するなど、Compress-Archive/Expand-Archiveでは足りない細かいZIP操作をしたい場合は、.NETのZipFile/ZipArchiveクラスを直接呼び出して行う
evidence: system.io.compression.zipfile
verified at: 2026-08-01
certainty: context-dependent

subject: ZipFile/ZipArchive API
predicate: requires
object: Add-Type
description: ZipFileクラスを使うにはSystem.IO.Compression.FileSystemアセンブリへの参照が必要で、Windows PowerShell 5.1ではAdd-Typeによる明示ロードが必要になる場面が多い
evidence: add-type
verified at: 2026-08-01
certainty: context-dependent

subject: P/Invoke
predicate: mayCause
object: P/Invokeシグネチャ誤りによるクラッシュ
description: DllImportのシグネチャ(引数の型、文字セット、呼び出し規約)を誤ると、例外では済まずプロセスごと落ちることがある
evidence: pinvoke
verified at: 2026-08-01
certainty: context-dependent