【PowerShell】CSV を読み書きする方法|Import-CSV と Export-CSV

【PowerShell】CSV を読み書きする方法|Import-CSV と Export-CSV PowerShell

PowerShell では Import-CsvExport-Csv コマンドレットを使うことで、CSV ファイルの読み書きを簡単に行えます。データをオブジェクトとして扱えるため、フィルタリングや整形が容易です。ここでは CSV の基本的な読み取りから書き出しまでの流れを解説します。

CSV を読み込む:Import-Csv

Import-Csv を使うと、CSV ファイルの各行を PowerShell のオブジェクトとして取り込めます。

# sample.csv の内容
# Name,Age,City
# Taro,30,Tokyo
# Hanako,25,Osaka

# CSV を読み込む
$data = Import-Csv -Path "sample.csv"

# オブジェクトとして出力
$data

出力結果は以下のように表示され、列名がプロパティとして扱えるようになります。

Name   Age City
----   --- ----
Taro   30  Tokyo
Hanako 25  Osaka

プロパティにアクセスすることも可能です。

foreach ($row in $data) {
    Write-Output "$($row.Name) さんは $($row.City) 在住です"
}

CSV に書き出す:Export-Csv

オブジェクトを CSV ファイルに保存するときは Export-Csv を使います。

$people = @(
    [PSCustomObject]@{ Name = "Taro"; Age = 30; City = "Tokyo" }
    [PSCustomObject]@{ Name = "Hanako"; Age = 25; City = "Osaka" }
)

# CSV に書き出し
$people | Export-Csv -Path "output.csv" -NoTypeInformation

-NoTypeInformation を付けると、先頭に余計な型情報が出力されないため扱いやすい CSV になります。

既存 CSV の加工と保存

読み込んだ CSV に処理を加えて、新しい CSV として保存することも簡単です。

# CSV を読み込む
$data = Import-Csv -Path "sample.csv"

# 年齢を 1 増やす
$data | ForEach-Object { $_.Age = [int]$_.Age + 1; $_ } |
    Export-Csv -Path "updated.csv" -NoTypeInformation

エンコーディングの指定

日本語を含む CSV を扱う場合、エンコーディングに注意が必要です。特に Excel で開くことを前提にするなら -Encoding UTF8 または -Encoding Default を指定します。

$data | Export-Csv -Path "output.csv" -NoTypeInformation -Encoding UTF8

まとめ

  • Import-Csv で CSV をオブジェクトとして読み込める
  • Export-Csv でオブジェクトを CSV ファイルに保存できる
  • -NoTypeInformation を指定すると不要な行を出力しない
  • 日本語を含む場合は -Encoding の指定を忘れない

PowerShell の CSV 操作はシンプルで強力です。データの変換やログ出力、Excel との連携など、幅広いシーンで活用できます。