もくじ
📝 はじめに
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 計算プロパティ)
