【初心者向け】PowerShell「Export-Csv」の使い方完全ガイド|データをCSVで出力・保存する最強テクニック

Windows

PowerShellで情報を扱っていると、
このデータをExcelで確認したい
「ログをCSV形式で保存したい
という場面がよくありますよね。

そんな時に大活躍するのが「Export-Csv」コマンドです。

Export-Csvを使えば、PowerShellの出力をそのまま表形式でCSVファイルに保存できます。

これはログ管理、レポート作成、自動集計など、業務効率化に欠かせないテクニックです。

この記事では、PowerShell初心者の方でもスムーズに使えるように、Export-Csvの基本構文から、実用的なオプション、よくあるエラーと対処法、実務レベルの応用例まで丁寧に解説します。

スポンサーリンク

Export-Csvとは?

Export-Csvは、PowerShellで取得したオブジェクト(情報)をCSV形式のファイルに出力するためのコマンドです。

CSVファイルとは、Excelなどで開ける「カンマ区切りの表形式データ」のこと。

業務でもよく使われる形式です。

PowerShellでは、さまざまなコマンドの出力結果をパイプ(|)でExport-Csvに渡すことで、簡単にCSVファイルとして保存できます。

基本的な使い方

構文

コマンド | Export-Csv -Path "保存先のパス" -NoTypeInformation

-NoTypeInformation は必須ではありませんが、ファイル冒頭に余計な型情報を出力しないため、ほとんどのケースで付けるのが推奨されます。

具体例:すぐ使えるパターン

すぐ使えるパターンも紹介する。

例1:ファイル一覧をCSV出力

Get-ChildItem -Path "C:\Logs" | Export-Csv -Path "C:\Output\log_files.csv" -NoTypeInformation

このコマンドで、C:\Logsフォルダ内のファイル一覧がCSVファイルとして保存されます。

ファイル名、サイズ、更新日時などの情報が含まれます。

例2:稼働中のサービス一覧をCSVに保存

Get-Service | Where-Object { $_.Status -eq "Running" } | Export-Csv -Path "running_services.csv" -NoTypeInformation

現在実行中のすべてのWindowsサービスの情報がCSVファイルに保存されます。サービス名、表示名、状態などが記録されます。

例3:プロセス情報をCSVに保存(文字コード指定)

Get-Process | Export-Csv -Path "processes.csv" -Encoding UTF8 -NoTypeInformation

実行中のすべてのプロセスの情報が、UTF-8エンコードでCSVファイルに保存されます。

よく使うオプション

オプション名説明
-NoTypeInformation型情報の出力を省略(CSV先頭行に不要な行を出さない)
-Append既存のCSVに追記(見出し行が重複しないよう注意)
-Encoding文字コードを指定(UTF8, ASCII, Defaultなど)
-Force書き込み先ファイルが存在しても強制的に上書き
-Delimiter区切り文字を指定(デフォルトはカンマ「,」)
-UseCultureシステムの地域設定に合わせた区切り文字を使用

-NoTypeInformationの必要性

PowerShell 5.1以前では、Export-Csvを使うと、デフォルトでCSVファイルの1行目に「#TYPE System.~」という型情報が出力されていました。

これがExcelでの読み込み時に邪魔になるため、-NoTypeInformationを付けるのが一般的です。

PowerShell 6.0以降は、この型情報はデフォルトで出力されなくなりましたが、互換性のために明示的に指定するのが良い習慣です。

-Appendの使い方

既存のCSVファイルに追記する場合に使います:

Get-Service -Name "BITS" | Export-Csv -Path "services.csv" -NoTypeInformation
Get-Service -Name "Spooler" | Export-Csv -Path "services.csv" -Append -NoTypeInformation

注意点として、1回目の出力で列名(ヘッダー)が書き込まれるため、追記時には自動的にヘッダーを書き込まないようになっています。

応用テクニック:自作オブジェクトのCSV出力

PowerShellでは自分でオブジェクトを作成して、それをCSV出力することも可能です。

この機能は、さまざまなソースからのデータを組み合わせたり、情報を整形したりする際に非常に便利です。

単一オブジェクトの作成と出力

$data = [PSCustomObject]@{
    Name = "TestUser"
    Email = "test@example.com"
    Date = (Get-Date).ToString("yyyy-MM-dd")
}
$data | Export-Csv -Path "users.csv" -NoTypeInformation

複数オブジェクトの配列を作成して出力

$users = @(
    [PSCustomObject]@{
        Name = "User1"
        Email = "user1@example.com"
        Department = "IT"
    },
    [PSCustomObject]@{
        Name = "User2"
        Email = "user2@example.com"
        Department = "HR"
    }
)
$users | Export-Csv -Path "multiple_users.csv" -NoTypeInformation

既存データを加工してCSV出力

Get-Process | Select-Object Name, CPU, WorkingSet | ForEach-Object {
    [PSCustomObject]@{
        ProcessName = $_.Name
        CPUTime = [math]::Round($_.CPU, 2)
        MemoryMB = [math]::Round($_.WorkingSet / 1MB, 2)
    }
} | Export-Csv -Path "formatted_processes.csv" -NoTypeInformation

CSVファイルを開いて確認する方法(自動でExcel起動)

CSVファイルを作成した後、すぐに確認したい場合は以下のコマンドが便利です:

Invoke-Item "C:\Output\log_files.csv"

→ 作成したCSVファイルをダブルクリックするのと同じ操作が自動化できます。これにより、デフォルトのアプリケーション(通常はExcelかそれに準ずるスプレッドシートアプリ)でCSVが開きます。

よくあるエラーと対処法

エラー:ファイルが使われています

Export-Csv : ファイル 'C:\Output\log_files.csv' にアクセスできません。ファイルは別のプロセスで使用されています。

原因:CSVファイルがExcelなどで開かれたまま 対処

  • 対象ファイルを閉じる
  • -Force で上書き(ただし、開いているアプリによっては失敗する場合も)
  • 別名で保存する(ファイル名に日時を含めるなど)

エラー:文字化けする

原因:日本語環境ではエンコード指定が必要な場合あり 対処

  • -Encoding UTF8 など明示的に指定
  • Excel側でCSVインポート時に文字コードを指定
Get-Service | Export-Csv -Path "services.csv" -Encoding UTF8 -NoTypeInformation

エラー:パスが見つかりません

Export-Csv : パス 'C:\NonExistentFolder\file.csv' の一部が見つかりませんでした。

原因:保存先のフォルダが存在しない 対処

  • 正しいパスを指定する
  • 必要なフォルダを事前に作成する
# フォルダを作成してから保存
New-Item -Path "C:\Output" -ItemType Directory -Force
Get-Service | Export-Csv -Path "C:\Output\services.csv" -NoTypeInformation

Export-Csvが活躍するシーン

ログの記録・集計

# システムイベントログを抽出してCSV保存
Get-EventLog -LogName System -Newest 100 | 
    Select-Object TimeGenerated, EntryType, Source, Message |
    Export-Csv -Path "system_events.csv" -NoTypeInformation

レポートの自動生成

# ディスク使用状況のレポート作成
Get-WmiObject -Class Win32_LogicalDisk | 
    Select-Object DeviceID, 
                 @{Name="SizeGB";Expression={[math]::Round($_.Size/1GB, 2)}},
                 @{Name="FreeGB";Expression={[math]::Round($_.FreeSpace/1GB, 2)}},
                 @{Name="FreePercent";Expression={[math]::Round($_.FreeSpace/$_.Size*100, 1)}} |
    Export-Csv -Path "disk_report.csv" -NoTypeInformation

システム監視結果の保存

# 一定間隔でCPU使用率を記録
$logFile = "cpu_monitor_$(Get-Date -Format 'yyyyMMdd').csv"
while ($true) {
    $cpuTime = (Get-Counter '\Processor(_Total)\% Processor Time').CounterSamples.CookedValue
    [PSCustomObject]@{
        Timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
        CPUPercent = [math]::Round($cpuTime, 2)
    } | Export-Csv -Path $logFile -Append -NoTypeInformation
    Start-Sleep -Seconds 60  # 1分ごとに記録
}

バックアップ情報の一覧化

# バックアップファイルの一覧取得
Get-ChildItem -Path "D:\Backups" -Recurse -File |
    Select-Object Name, LastWriteTime, 
                 @{Name="SizeMB";Expression={[math]::Round($_.Length/1MB, 2)}} |
    Export-Csv -Path "backup_files.csv" -NoTypeInformation

まとめ|Export-CsvでPowerShell出力をスマートに記録・共有しよう

PowerShellのExport-Csvは、業務の現場で「データを可視化」「記録に残す」「報告に使う」ために欠かせない武器です。

たった1行で、情報を表形式で扱いやすく保存できるのは、Excelを使うユーザーとの橋渡しにもなります。

本記事のポイント:

  • Export-CsvはオブジェクトをCSV形式で保存するコマンド
  • -NoTypeInformationはほぼ必須
  • -Encoding-Appendで柔軟な出力が可能
  • カスタムオブジェクトと組み合わせることで、より高度なデータ整形も可能
  • 実務でのログ・レポート出力に非常に便利

PowerShellを業務に活かすなら、Export-Csvは絶対に押さえておきたいコマンドです。

ぜひ日々のスクリプトに組み込んで、情報の見える化・共有の効率化に役立ててください。

コメント

タイトルとURLをコピーしました