Export-Csv:オブジェクトを効率的にCSVファイルに変換する

PowerShellからCSVファイルに情報を送信する必要がある場合、Export-CSVコマンドレットが役立ちます。このコマンドレットは、テキストファイルから構造化された形式に変換する手間を省くために、管理者に多くの時間を節約してくれます。Excelで遊ぶ代わりに、PowerShellを使用してCSVファイルを作成することができます。

Export-Csvコマンドレットを使用すると、任意のPowerShellオブジェクトからレポートにデータベース送信などのためのCSVファイルを作成することができます。

CSV形式は、テキストファイルとして保存された行のカンマ区切りリストです。テキストファイルであるため、実際には汎用のテキストファイルコマンド(Set-Contentなど)を使用して処理することも可能です。ただし、汎用のコマンドを使用する場合、必要なCSVの構造を自分で構築する必要があります。CSVの出力をファイルに送信するためにすでにExport-Csvコマンドがあるので、それを使用するほうが便利です。

CSVファイルには特定の構造が必要です。このコマンドレットが情報を理解し、読み取り、CSVファイルに変換する能力があるため、このPowerShellコマンドレットは非常に便利です。

ManageEngine ADManager Plusを使用して、Active Directory、Exchange、Microsoft 365を管理およびレポートします。 無料トライアルをダウンロード!

オブジェクト -eq CSV行

Export-Csvコマンドレットには単一の目的があります。それはPowerShellオブジェクトをCSVファイルに保存することです。

例えば、foobarという2つのプロパティを持つオブジェクトがあるとしましょう。それぞれのプロパティには12という値があります。このオブジェクトをExport-Csvに送信すると、2つの列と1行のCSVファイルが作成されます。その後、CSVの内容をインポートして表示することができます。

PS> $testObject = [pscustomobject]@{'foo' = 1; 'bar' = 2}
PS> $testObject | Export-Csv -Path C:\TestObject.csv
PS> $testObject
foo	bar
1 	2
PS> Import-Csv -Path C:\TestObject.csv
foo	bar
1  	2

PowerShellは実質的にメモリ内のオブジェクトとCSVファイルを同じように扱います!また、列ラベルがヘッダーであることも指定しています。このコマンドレットを使用してオブジェクトをエクスポートすることは、オブジェクトをファイルシステムに保存することと同じです。汎用テキストPowerShellコマンドGet-Contentを使用して、Export-Csvコマンドがエクスポートした生のテキストを確認することができます。

PS> Get-Content -Path C:\TestObject.csv

#TYPE System.Management.Automation.PSCustomObject
"foo","bar" "1","2"

このコマンドが各行エントリの周りに二重引用符を使用していることに注目してください。これにより、スペースを含むフィールドを含めることができます。

Export-Csvの便利なパラメータ

Windows PowerShell 5.1では、Export-CsvコマンドレットはCSVファイルを作成したオブジェクトのタイプを示す行を出力します。この行を非表示にしたい場合、人気のあるパラメータであるNoTypeInformationを使用することができます。

多くの異なるCSVファイルやデータソースと一緒に作業する場合、既存のファイルを上書きしてしまうことがあることに気付くかもしれません。ただし、Appendパラメータを使用していれば問題ありません。 Appendパラメータを使用すると、既存のファイルを上書きする代わりに、行をCSVに追加することができます。

もう1つ便利なパラメータはDelimiterです。場合によっては、通常のリストセパレータ(カンマ)ではなく、フィールドを区切るためにタブを使用するCSVファイルが必要になることがあります。また、セミコロンを使用することもあります。 Export-Csv PowerShellコマンドレットは、必要な区切り文字を指定することでこれらの問題を解決するのに役立ちます。

PS> $testObject | Export-Csv -Path C:\TestObject.csv -Delimiter "`t"
PS> Get-Content -Path C:\TestObject.csv

#TYPE System.Management.Automation.PSCustomObject
"foo"   "bar" "1"     "2"

引用符の処理

CSVの行を作成する際、Export-Csvはすべてのフィールドを引用符で囲みます。一部の状況では、これは望ましくない場合があります。残念ながら、それを防ぐ方法はありません。ただし、少しのコードを使用することで実現できます。

以下に、CSVファイルを作成する例が示されています。その後、Get-Contentは生のテキストファイルを読み取り、メモリ内のすべての二重引用符を削除します。その情報をメモリからディスクに書き込むためにSet-Contentを使用します。

$testObject | Export-Csv -Path C:\TestObject.csv
(Get-Content -Path C:\TestObject.csv -Raw).replace('"','') | Set-Content -Path C:\TestObject.csv

ManageEngine ADManager PlusでActive Directory、Exchange、Microsoft 365を管理およびレポートします。 無料トライアルをダウンロード!

概要

Export-Csvコマンドレットは、CSVデータを管理するためのシンプルで非常に便利なツールです。CSVデータファイルの構造を理解し、PowerShellオブジェクトをCSV行に変換することができます。

I’m not about to go back to batch, or VBScript where creating a CSV file from an existing object required instantiating a FileSystemObject, creating a loop and a bunch of Write() methods!

このコマンドは、PowerShellコードを書き始める素晴らしい理由の一つです!

Source:
https://adamtheautomator.com/export-csv/