PowerShell では Import-Csv
と Export-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 との連携など、幅広いシーンで活用できます。