[登録されているタグ]

[記事公開日]2025/12/20

PowerShellでCSVを書き出す|Export-Csvの使い方

📝 はじめに

PowerShellで一覧を取得して加工したあと、
「この結果をCSVにしてExcelで確認したい」
「抽出したデータをファイルとして保存したい」
という場面はかなり多いです。

そのときに使うのが Export-Csv です。
この記事では、PowerShellのオブジェクトをCSVとして書き出す基本から、
実務でハマりやすいポイント(列の順番・文字化け・追記)までまとめて解説します。

こんな検索で見に来る人が多いです

  • PowerShell 結果をCSVに出力したい
  • Export-Csv 使い方 / NoTypeInformation
  • CSV 文字化け UTF-8 / Excelで開く

✅ このコマンドでできること(要点)

  • PowerShellのオブジェクトをCSVとしてファイルに保存できる
  • ヘッダー(列名)付きで出力できる
  • 必要な列だけに絞ってCSV化できる(Select-Objectと組み合わせ)
  • 並び替え・抽出した結果をそのままCSV化できる
  • 文字コード(Encoding)を指定して文字化け対策できる

✅ Export-Csv でできること

Export-Csv は、コマンド結果(オブジェクト)を
「列(プロパティ)を持つ表データ」としてCSVに書き出すコマンドです。

似た用途の考え方としては、「画面表示の結果を保存する」のではなく、
データとして保存してExcelや別処理に渡すイメージです。

🧩 基本構文

コマンド | Export-Csv -Path "C:\path\out.csv" -NoTypeInformation
補足

-NoTypeInformation は、CSVの先頭に「型情報の行」を入れないための指定です。
Excelで開く前提なら、付けておくことが多いです。

▶ 基本的な使い方(まずこれだけ)

🧾 最小:結果をそのままCSVに保存する

Get-Process | Export-Csv -Path ".\process.csv" -NoTypeInformation

実行するとカレントフォルダに process.csv が作成されます。
Excelで開いて列が並んでいればOKです。

🧾 よく使う形:必要な列だけに絞って保存する

Get-Process |
Select-Object Name, Id, CPU |
Export-Csv -Path ".\process_min.csv" -NoTypeInformation

CSVは「列が多すぎる」と見づらくなりがちなので、
Select-Object で必要な列に整えてから出すのが実務では定番です。

🛠 よく使われる指定例

🔹 文字化け対策:Encodingを指定する

Get-Service |
Select-Object Status, Name, DisplayName |
Export-Csv -Path ".\services_utf8.csv" -NoTypeInformation -Encoding UTF8

Excelで開く環境によっては文字化けする場合があります。
そのときは -Encoding を明示し、受け渡し先に合わせて調整するのが安心です。

🔹 上位N件だけを保存する(重いデータの試し出力)

Get-ChildItem "C:\Windows" |
Select-Object -First 50 FullName, Length, LastWriteTime |
Export-Csv -Path ".\top50.csv" -NoTypeInformation
コツ

  • まず -First 10 など小さく出して列を確認すると失敗が減ります。

🔹 追記で保存したい:Append(運用注意)

Get-Date |
Select-Object @{Name="Timestamp";Expression={$_}} |
Export-Csv -Path ".\history.csv" -NoTypeInformation -Append
注意

  • 追記運用は「ヘッダーが重複しないか」「列の構成が途中で変わらないか」に注意が必要です。
  • 列が変わると、後で Import-Csv したときに扱いづらくなる場合があります。

💼 実務でよく使う使用例(応用)

📌 抽出→並び替え→CSV(よくあるレポート作成)

Get-Process |
Where-Object CPU -gt 1 |
Sort-Object CPU -Descending |
Select-Object -First 20 Name, CPU, Id |
Export-Csv -Path ".\high_cpu.csv" -NoTypeInformation

たとえば「CPU使用率が高いプロセス上位」をCSVで出して共有したいときに便利です。

📌 CSVに出す列を“計算して追加”して保存する

Get-ChildItem "C:\Windows\Temp" |
Select-Object FullName, Length, LastWriteTime,
  @{Name="SizeMB";Expression={[math]::Round($_.Length/1MB,2)}} |
Export-Csv -Path ".\temp_files.csv" -NoTypeInformation

こういう「人が見やすい列」を追加してCSVに出すのは、実務でよく使う型です。

組み合わせ例(相性の良いコマンド)

  • Select-Object:列と順番の固定(超重要)
  • Where-Object:条件抽出
  • Sort-Object:並び替え
  • Measure-Object:件数/合計などの集計

🧩 よくある勘違い・つまずきポイント

  • CSVは「表示結果」ではなく「データ」を保存するもの(Format-Tableの結果をCSVにするのは別物)
  • 列の順番・列数は Select-Object に依存する
  • 数値や日付はCSVでは“文字”として扱われることがある(読み込み側で解釈が変わる場合があります)
  • 文字コードの違いでExcel表示が崩れることがある
  • 追記運用は列ズレ・ヘッダー重複が起きやすい

🔄 cmdとの違いについて

cmdでは出力をリダイレクト(>)してCSVっぽく保存することはできますが、
「列(プロパティ)を意識して表データとして保存する」ことは難しい場合があります。
PowerShellの Export-Csv は、オブジェクトの列をそのままCSVにできる点が強みです。

⚠ エラー・うまく動かないときの確認ポイント

  • 保存先フォルダが存在するか(相対パスの場合はカレントフォルダに注意)
  • 保存先に書き込み権限があるか(管理者権限が必要な場所ではないか)
  • 出力したい列が存在するか(プロパティ名の綴り)
  • Excelで開く用途なら文字コードを見直す(UTF8/Defaultなど)

🧠 注意点

CSVは便利ですが、運用で「列の整合性」が崩れると後で扱いにくくなります。
実務では、列名・列順・出力形式(Encodingなど)を固定しておくとトラブルが減ります。

📌 まとめ

  • Export-Csv はオブジェクトをCSVとして保存するコマンド
  • 列の整理は Select-Object で先に行うのが基本
  • 文字化けが気になるなら -Encoding を明示する
  • 追記(Append)は列ズレ・ヘッダー重複に注意して運用する

🔎 PowerShellコマンドを探す

  • ファイルを削除したい
  • 一覧を表示したい
  • 文字列を検索したい
  • 条件で絞り込みたい
  • エラーや実行できない原因を調べたい
  • CSVを書き出したい
  • CSVを読み込みたい(Import-Csv)
  • 文字コードを指定して保存したい(Out-File -Encoding
  • 列を追加して出力したい(Select-Object 計算プロパティ)
Generic filters

サイト内検索(入力すると候補が出ます)

Generic filters


Generic filters

Generic filters

すべてを開く | すべてを閉じる
ページ上部へ戻る