ConvertTo-Csv
.NET オブジェクトを一連の文字区切り値 (CSV) 文字列に変換します。
構文
ConvertTo-Csv
[-InputObject] <PSObject>
[[-Delimiter] <Char>]
[-IncludeTypeInformation]
[-NoTypeInformation]
[-QuoteFields <String[]>]
[-UseQuotes <QuoteKind>]
[<CommonParameters>]
ConvertTo-Csv
[-InputObject] <PSObject>
[-UseCulture]
[-IncludeTypeInformation]
[-NoTypeInformation]
[-QuoteFields <String[]>]
[-UseQuotes <QuoteKind>]
[<CommonParameters>]
説明
コマンドレットは ConvertTo-CSV
、送信するオブジェクトを表す一連の文字区切り値 (CSV) 文字列を返します。 その後、 コマンドレットを ConvertFrom-Csv
使用して、CSV 文字列からオブジェクトを再作成できます。 CSV から変換されるオブジェクトは、プロパティ値を含み、メソッドを含まない元のオブジェクトの文字列値です。
コマンドレットを Export-Csv
使用して、オブジェクトを CSV 文字列に変換できます。 Export-CSV
は に ConvertTo-CSV
似ていますが、CSV 文字列をファイルに保存する点が除きます。
ConvertTo-CSV
コマンドレットには、コンマ以外の区切り記号を指定するか、現在のカルチャを区切り記号として使用するパラメーターがあります。
例
例 1: オブジェクトを CSV に変換する
次の使用例は、 Process オブジェクトを CSV 文字列に変換します。
Get-Process -Name pwsh | ConvertTo-Csv -NoTypeInformation
"Name","SI","Handles","VM","WS","PM","NPM","Path","Parent","Company","CPU","FileVersion", ...
"pwsh","8","950","2204001161216","100925440","59686912","67104", ...
コマンドレットは Get-Process
Process オブジェクトを取得し、 Name パラメーターを使用して PowerShell プロセスを指定します。 プロセス オブジェクトは、パイプラインをコマンドレットに ConvertTo-CSV
送信します。 コマンドレットは ConvertTo-CSV
、 オブジェクトを CSV 文字列に変換します。 NoTypeInformation パラメーターは、csv 出力から#TYPE情報ヘッダーを削除し、PowerShell 6 では必要ありません。
例 2: DateTime オブジェクトを CSV に変換する
次の使用例は、 DateTime オブジェクトを CSV 文字列に変換します。
$Date = Get-Date
ConvertTo-Csv -InputObject $Date -Delimiter ';' -NoTypeInformation
"DisplayHint";"DateTime";"Date";"Day";"DayOfWeek";"DayOfYear";"Hour";"Kind";"Millisecond";"Minute";"Month";"Second";"Ticks";"TimeOfDay";"Year"
"DateTime";"Friday, January 4, 2019 14:40:51";"1/4/2019 00:00:00";"4";"Friday";"4";"14";"Local";"711";"40";"1";"51";"636822096517114991";"14:40:51.7114991";"2019"
コマンドレットは Get-Date
DateTime オブジェクトを取得し、変数に $Date
保存します。 コマンドレットは ConvertTo-Csv
、 DateTime オブジェクトを文字列に変換します。 InputObject パラメーターは、 変数に格納されている DateTime オブジェクトを$Date
使用します。 Delimiter パラメーターは、文字列値を区切るセミコロンを指定します。 NoTypeInformation パラメーターは、csv 出力から#TYPE情報ヘッダーを削除し、PowerShell 6 では必要ありません。
例 3: PowerShell イベント ログを CSV に変換する
次の使用例は、PowerShell の Windows イベント ログを一連の CSV 文字列に変換します。
(Get-Culture).TextInfo.ListSeparator
Get-WinEvent -LogName 'PowerShellCore/Operational' | ConvertTo-Csv -UseCulture -NoTypeInformation
,
"Message","Id","Version","Qualifiers","Level","Task","Opcode","Keywords","RecordId", ...
"Error Message = System error""4100","1",,"3","106","19","0","31716","PowerShellCore", ...
コマンドレットは Get-Culture
、入れ子になったプロパティ TextInfo と ListSeparator を使用し、現在のカルチャの既定のリスト区切り記号を表示します。 コマンドレットは Get-WinEvent
イベント ログ オブジェクトを取得し、 LogName パラメーターを使用してログ ファイル名を指定します。 イベント ログ オブジェクトは、パイプラインから コマンドレットに ConvertTo-Csv
送信されます。 コマンドレットは ConvertTo-Csv
、イベント ログ オブジェクトを一連の CSV 文字列に変換します。 UseCulture パラメーターは、現在のカルチャの既定のリスト区切り記号を区切り記号として使用します。 NoTypeInformation パラメーターは、csv 出力から#TYPE情報ヘッダーを削除し、PowerShell 6 では必要ありません。
例 4: 2 つの列を引用符で囲んで CSV に変換する
次の使用例は、 DateTime オブジェクトを CSV 文字列に変換します。
Get-Date | ConvertTo-Csv -QuoteFields "DateTime","Date"
DisplayHint,"DateTime","Date",Day,DayOfWeek,DayOfYear,Hour,Kind,Millisecond,Minute,Month,Second,Ticks,TimeOfDay,Year
DateTime,"Thursday, August 22, 2019 11:27:34 AM","8/22/2019 12:00:00 AM",22,Thursday,234,11,Local,569,27,8,34,637020700545699784,11:27:34.5699784,2019
例 5: 必要な場合にのみ引用符で囲まれた CSV に変換する
次の使用例は、 DateTime オブジェクトを CSV 文字列に変換します。
Get-Date | ConvertTo-Csv -UseQuotes AsNeeded
DisplayHint,DateTime,Date,Day,DayOfWeek,DayOfYear,Hour,Kind,Millisecond,Minute,Month,Second,Ticks,TimeOfDay,Year
DateTime,"Thursday, August 22, 2019 11:31:00 AM",8/22/2019 12:00:00 AM,22,Thursday,234,11,Local,713,31,8,0,637020702607132640,11:31:00.7132640,2019
例 6: ハッシュテーブルを CSV に変換する
PowerShell 7.2 以降では、ハッシュテーブルを CSV に変換すると、最初のハッシュテーブルのキーがシリアル化され、出力のヘッダーとして使用されます。
$person1 = @{
Name = 'John Smith'
Number = 1
}
$person2 = @{
Name = 'Jane Smith'
Number = 2
}
$allPeople = $person1, $person2
$allPeople | ConvertTo-Csv
"Name","Number"
"John Smith","1"
"Jane Smith","2"
例 7: 追加のプロパティを使用してハッシュテーブルを CSV に変換する
PowerShell 7.2 以降では、 で追加のプロパティが追加 Add-Member
されたハッシュテーブルを変換するとき、または Select-Object
追加のプロパティも CSV 出力のヘッダーとして追加されます。
$allPeople | Add-Member -Name ExtraProp -Value 42
$allPeople | ConvertTo-Csv
"Name","Number","ExtraProp"
"John Smith","1","42"
"Jane Smith","2","42"
各ハッシュテーブルには、 によって Add-Member
という名前ExtraProp
のプロパティが追加され、CSV に変換されます。 が出力内のヘッダーであることがわかります ExtraProp
。
追加されたプロパティの名前がハッシュテーブルのキーと 同じ 場合、キーが優先され、キーのみが CSV に変換されます。
パラメーター
-Delimiter
CSV 文字列でプロパティ値を区切る区切り記号を指定します。 既定値はコンマ (,
) です。 コロン (:
) などの文字を入力します。 セミコロン (;
) を指定するには、単一引用符で囲みます。
Type: | Char |
Position: | 1 |
Default value: | comma (,) |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-IncludeTypeInformation
このパラメーターを使用すると、出力の最初の行にオブジェクト型の完全修飾名が続 #TYPE
きます。 たとえば、#TYPE System.Diagnostics.Process
のようにします。
このパラメーターは、PowerShell 6.0 で導入されました。
Type: | SwitchParameter |
Aliases: | ITI |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
CSV 文字列に変換されるオブジェクトを指定します。 オブジェクトが格納されている変数を入力するか、オブジェクトを取得するコマンドまたは式を入力します。 オブジェクトを に ConvertTo-CSV
パイプすることもできます。
Type: | PSObject |
Position: | 0 |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-NoTypeInformation
#TYPE
出力から情報ヘッダーを削除します。 このパラメーターは PowerShell 6.0 の既定値となり、下位互換性のために含まれています。
Type: | SwitchParameter |
Aliases: | NTI |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-QuoteFields
引用符で囲む必要がある列の名前を指定します。 このパラメーターを使用する場合は、指定された列のみが引用符で囲まれます。 このパラメーターは PowerShell 7.0 で追加されました。
Type: | String[] |
Aliases: | QF |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseCulture
アイテム区切り記号として、現在のカルチャのリスト区切り記号を使用します。 カルチャのリスト区切り記号を見つけるには、次のコマンドを使用します。 (Get-Culture).TextInfo.ListSeparator
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseQuotes
CSV ファイルで引用符を使用するタイミングを指定します。 次のいずれかの値になります。
- 決して - 何も引用符で囲まない
- 常に - すべてを引用符で囲む (既定の動作)
- AsNeeded - 区切り文字、二重引用符、または改行文字を含む引用符フィールドのみ
このパラメーターは PowerShell 7.0 で追加されました。
Type: | Microsoft.PowerShell.Commands.BaseCsvWritingCommand+QuoteKind |
Aliases: | UQ |
Position: | Named |
Default value: | Always |
Accept pipeline input: | False |
Accept wildcard characters: | False |
入力
拡張型システム (ETS) アダプターを持つ任意のオブジェクトをこのコマンドレットにパイプできます。
出力
このコマンドレットは、変換された各オブジェクトを表す 1 つ以上の文字列を返します。
メモ
CSV 形式では、各オブジェクトはプロパティ値の文字区切りのリストで表されます。 プロパティ値は、オブジェクトの ToString() メソッドを使用して文字列に変換されます。 文字列は、プロパティ値の名前で表されます。 ConvertTo-CSV
では、オブジェクトの メソッドはエクスポートされません。
CSV 文字列は次のように出力されます。
- IncludeTypeInformation を使用する場合、最初の文字列は#TYPEオブジェクト型の完全修飾名で構成されます。 たとえば、 System.Diagnostics.Process #TYPEします。
- IncludeTypeInformation が使用されていない場合、最初の文字列には列ヘッダーが含まれます。 ヘッダーには、最初のオブジェクトのプロパティ名が文字区切りリストとして含まれています。
- 残りの文字列には、各オブジェクトのプロパティ値の文字区切りのリストが含まれています。
PowerShell 6.0 以降では、 の既定の ConvertTo-CSV
動作は 、CSV に#TYPE 情報を含めず 、NoTypeInformation は暗黙的に指定されます。 IncludeTypeInformation を使用すると、 #TYPE 情報を含め、PowerShell 6.0 より前の の既定の ConvertTo-CSV
動作をエミュレートできます。
に複数のオブジェクトをConvertTo-CSV
ConvertTo-CSV
送信すると、最初に送信したオブジェクトのプロパティに基づいて文字列が順序付けられます。 残りのオブジェクトに指定されたプロパティの 1 つがない場合、そのオブジェクトのプロパティ値は Null で、2 つの連続するコンマで表されます。 残りのオブジェクトに追加のプロパティがある場合、これらのプロパティ値は無視されます。
関連リンク
フィードバック
フィードバックの送信と表示