PowerShellのExcel・CSV自動化の知識マップ(知識グラフ)
type: Dataset
description: PowerShellでCSV・Excel業務を自動化する際の最大の落とし穴は文字コードで、Windows PowerShell 5.1とPowerShell 7で既定のエンコーディングが異なるため、Import-CsvとExport-Csvは読み書きの両方でエンコーディングを明示しないと文字化けが起こり得ます。集計はGroup-Objectでグループ化してからMeasure-Objectで合計するのが基本形で、2つのCSVの突合はCompare-Objectによる差分検出か、マスタをハッシュテーブル化した結合かを目的に応じて使い分けます。xlsxの出力はExcel本体が不要なImportExcelモジュールが第一候補で、Excel COM操作はCOM参照の解放漏れによるEXCEL.EXEの残留を招きやすく、Microsoftが無人環境でのOffice自動化を推奨していないため、タスクスケジューラでの定期実行には向きません。

Import-Csv
type: Concept
definition: CSVファイルを、ヘッダー行を列名とする「1行=1オブジェクト」の表としてPowerShellへ読み込むコマンドレット。値はすべて文字列として読み込まれる。
alternative label: Import-Csvコマンドレット

Export-Csv
type: Concept
definition: パイプラインのオブジェクトをCSVファイルへ書き出すPowerShellのコマンドレット。

ImportExcelモジュール
type: Concept
definition: PowerShell Galleryで配布されるコミュニティ製モジュールで、Excel本体をインストールせずにxlsxの読み書き・テーブル化・書式設定・ピボットテーブル作成ができる。
alternative label: ImportExcel
recommended for: xlsx出力

PowerShell
type: Concept
definition: オブジェクトパイプラインとエラー処理機構を持つ、Microsoftが最も堅牢で最新のWindows自動化に推奨するコマンドラインシェル兼スクリプト言語。
alternative label: Windows PowerShell
alternative label: pwsh
alternative label: PowerShell 7
uses: Import-Csv
uses: Export-Csv
uses: Group-Object
uses: Measure-Object
uses: Compare-Object
uses: ハッシュテーブルによる列の引き当て(結合)
uses: Get-FileHash

CSVの文字化け
type: Concept
definition: CSVを読み書きするアプリやツール(ExcelやPowerShellのImport-Csv/Export-Csvなど)が文字コードを誤認したり既定エンコーディングと入力が食い違ったりする(BOMなしUTF-8をANSIとして解釈する、Export-Csvの既定ASCIIエンコーディングで書き込むなど)ことで、日本語が正しく表示されない、または失われる現象。
alternative label: 文字コードの誤認による文字化け

-Encodingの明示指定
type: Concept
definition: Import-Csv/Export-Csvなどの読み書きで、コマンドレットごとの既定値に頼らず、-Encodingでエンコーディングを明示的に指定すること。
alternative label: エンコーディングの明示
mitigates: CSVの文字化け

Group-Object
type: Concept
definition: 指定したプロパティの値ごとにオブジェクトをグループ化し、件数や内容を集計できるPowerShellのコマンドレット。
alternative label: -NoElement
alternative label: -AsHashTable
should precede: Measure-Object

Measure-Object
type: Concept
definition: パイプラインを流れるオブジェクトの件数・合計・平均・最大・最小を集計するPowerShellのコマンドレット。
alternative label: -Sum
alternative label: -Average
alternative label: -Maximum

Compare-Object
type: Concept
definition: 2つの一覧を比較し、片方にしかない要素をSideIndicatorとともに返すPowerShellのコマンドレット。
alternative label: -ReferenceObject
alternative label: -DifferenceObject
alternative label: SideIndicator

ハッシュテーブルによる列の引き当て(結合)
type: Concept
definition: マスタ側をキー→行のハッシュテーブルにしてから、明細を1行ずつ引き当てる、SQLのJOINに相当するPowerShellの実装パターン。
alternative label: ハッシュテーブル結合

Get-FileHash
type: Concept
definition: ファイルのハッシュ値(既定SHA256)を計算し、配布物やバックアップ、重複候補の内容が同一かを確認できるPowerShellのコマンドレット。

xlsx出力
type: Concept
definition: セルの書式を出力側で制御できる、xlsx形式でのファイル出力。CSVの値解釈問題を根本的に回避できる。
alternative label: Excelファイル出力

TLS 1.2の明示的な有効化
type: Concept
definition: [Net.ServicePointManager]::SecurityProtocolでTLS 1.2を有効にする設定。Windows PowerShell 5.1では既定で有効でない場合がある。
alternative label: [Net.ServicePointManager]::SecurityProtocol

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

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。公式には絶対に必要な場合にのみ使うことが推奨される。
mitigates: EXCEL.EXEのプロセス残留

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

subject: PowerShell
predicate: uses
object: Import-Csv
description: PowerShellはImport-CsvでCSVをオブジェクトの表として読み込める
evidence: import-csv
verified at: 2026-08-01
certainty: established

subject: PowerShell
predicate: uses
object: Export-Csv
description: PowerShellはExport-Csvでオブジェクトの列をCSVに書き出せる
evidence: export-csv
verified at: 2026-08-01
certainty: established

subject: Import-Csv
predicate: mayCause
object: CSVの文字化け
description: Windows PowerShell 5.1のImport-CsvはBOMのないファイルをUTF-8と解釈するため、Shift_JISのCSVをそのまま読むと文字化けし得る
evidence: about character encoding
verified at: 2026-08-01
certainty: context-dependent

subject: Export-Csv
predicate: mayCause
object: CSVの文字化け
description: Windows PowerShell 5.1のExport-Csvの既定エンコーディングはASCIIで、-Encodingを付け忘れると保存の時点で日本語が失われる
evidence: about character encoding
verified at: 2026-08-01
certainty: context-dependent

subject: -Encodingの明示指定
predicate: mitigates
object: CSVの文字化け
description: 読み書きの両方で-Encodingを明示すれば、5.1と7で既定エンコーディングが異なることによる文字化けは避けられる。ただし入力バイト列や受け取り側と合わないコーデックを選べば文字化けは起こり得る
evidence: about character encoding
verified at: 2026-08-01
certainty: established

subject: PowerShell
predicate: uses
object: Group-Object
description: PowerShellはGroup-Objectでオブジェクトをグループ化できる
evidence: group-object
verified at: 2026-08-01
certainty: established

subject: PowerShell
predicate: uses
object: Measure-Object
description: PowerShellはMeasure-Objectで件数や合計などを集計できる
evidence: measure-object
verified at: 2026-08-01
certainty: established

subject: Group-Object
predicate: shouldPrecede
object: Measure-Object
description: 部署ごとの集計のような処理は、Group-Objectでグループ化してから各グループをMeasure-Objectで合計する順で行う
evidence: group-object
evidence: measure-object
verified at: 2026-08-01
certainty: established

subject: PowerShell
predicate: uses
object: Compare-Object
description: PowerShellはCompare-Objectで2つの一覧の差分を検出できる
evidence: compare-object
verified at: 2026-08-01
certainty: established

subject: PowerShell
predicate: uses
object: ハッシュテーブルによる列の引き当て(結合)
description: PowerShellはハッシュテーブルを使ってマスタと明細の列を引き当てる結合処理を実装できる
evidence: about hash tables
verified at: 2026-08-01
certainty: established

subject: PowerShell
predicate: uses
object: Get-FileHash
description: PowerShellはGet-FileHashでファイルのハッシュ値を計算できる
evidence: get-filehash
verified at: 2026-08-01
certainty: established

subject: PowerShell
predicate: uses
object: ImportExcelモジュール
description: xlsxを直接読み書きしたい場合、PowerShellはPowerShell Galleryで配布されるImportExcelモジュールを追加導入することで読み書きできる
evidence: ImportExcel
verified at: 2026-08-01
certainty: context-dependent

subject: ImportExcelモジュール
predicate: recommendedFor
object: xlsx出力
description: ImportExcelはExcel本体のインストール不要でxlsxの読み書き・テーブル化・書式設定・ピボットテーブル作成までできるため、xlsx出力の第一候補になる
evidence: ImportExcel
verified at: 2026-08-01
certainty: established

subject: ImportExcelモジュール
predicate: requires
object: TLS 1.2の明示的な有効化
description: PowerShell GalleryからのInstall-ModuleにはTLS 1.2以上が必要で、既定で有効でない環境ではセッションで明示的に有効化しないと失敗することがある
evidence: install-powershellget
verified at: 2026-08-01
certainty: context-dependent

subject: Excel COM自動化(Excel COM Interop)
predicate: notRecommendedFor
object: xlsx出力
description: 通常のxlsx出力にExcel COM操作を用いることは推奨されない。マクロ実行などExcelそのものの機能が必要な場合の最終手段に限る
evidence: considerations-unattended-automation-office-microsoft-365-for-unattended-rpa
verified at: 2026-08-01
certainty: context-dependent

subject: Excel COM自動化(Excel COM Interop)
predicate: mayCause
object: EXCEL.EXEのプロセス残留
description: ワークブックやセル範囲を触るたびに増えるCOM参照(RCW)を解放しないと、Quit()を呼んでもEXCEL.EXEのプロセスが残留する。中間オブジェクトのRCWまで解放していれば残留しない
evidence: quitting-process-continues-running
verified at: 2026-08-01
certainty: context-dependent

subject: Marshal.ReleaseComObject
predicate: mitigates
object: EXCEL.EXEのプロセス残留
description: Marshal.ReleaseComObjectによる明示的解放とGC.Collectの実行が、EXCEL.EXEの残留を軽減する
evidence: system.runtime.interopservices.marshal.releasecomobject
verified at: 2026-08-01
certainty: established

subject: Excel COM自動化(Excel COM Interop)
predicate: requires
object: Marshal.ReleaseComObject
description: Excel COM操作でEXCEL.EXEの残留を防ぐには、触った中間オブジェクトも含めて参照を明示的に解放することが前提になる
evidence: system.runtime.interopservices.marshal.releasecomobject
evidence: quitting-process-continues-running
verified at: 2026-08-01
certainty: context-dependent

subject: Excel COM自動化(Excel COM Interop)
predicate: notRecommendedFor
object: タスクスケジューラの無人実行
description: Microsoftは無人・非対話のクライアント(サービスやタスクスケジューラでの実行など)からのOffice自動化を推奨せずサポートもしていないため、Excel COM操作をタスクスケジューラでの無人実行に用いることは推奨されない
evidence: considerations-unattended-automation-office-microsoft-365-for-unattended-rpa
evidence: load-data-to-from-excel-with-ssis
verified at: 2026-08-01
certainty: established