Export-Csv

オブジェクトを一連の文字区切り値 (CSV) 文字列に変換し、文字列をファイルに保存します。

構文

Export-Csv
      [[-Path] <string>]
      [[-Delimiter] <char>]
      -InputObject <psobject>
      [-LiteralPath <string>]
      [-Force]
      [-NoClobber]
      [-Encoding <string>]
      [-Append]
      [-NoTypeInformation]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]
Export-Csv
      [[-Path] <string>]
      -InputObject <psobject>
      [-LiteralPath <string>]
      [-Force]
      [-NoClobber]
      [-Encoding <string>]
      [-Append]
      [-UseCulture]
      [-NoTypeInformation]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]

説明

コマンドレットは Export-CSV 、送信するオブジェクトの CSV ファイルを作成します。 各オブジェクトは、オブジェクトのプロパティ値の文字区切りのリストを含む行です。 このコマンドレットを Export-CSV 使用すると、スプレッドシートを作成し、CSV ファイルを入力として受け入れるプログラムとデータを共有できます。

コマンドレットに送信する前にオブジェクトの書式を Export-CSV 設定しないでください。 書式設定されたオブジェクトを受け取った場合 Export-CSV 、CSV ファイルにはオブジェクト プロパティではなく書式プロパティが含まれます。 オブジェクトの選択したプロパティのみをエクスポートするには、コマンドレットを Select-Object 使用します。

例 1: プロセス プロパティを CSV ファイルにエクスポートする

次の使用例は、特定の プロパティを持つプロセス オブジェクトを選択し、オブジェクトを CSV ファイルにエクスポートします。

Get-Process -Name WmiPrvSE |
    Select-Object -Property BasePriority,Id,SessionId,WorkingSet |
    Export-Csv -Path .\WmiData.csv -NoTypeInformation
Import-Csv -Path .\WmiData.csv

BasePriority Id    SessionId WorkingSet
------------ --    --------- ----------
8            976   0         20267008
8            2292  0         36786176
8            3816  0         30351360
8            8604  0         15011840
8            10008 0         8830976
8            11764 0         14237696
8            54632 0         9502720

コマンドレットは Get-Process Process オブジェクトを取得します。 Name パラメーターは、WmiPrv Standard Edition プロセス オブジェクトのみを含むように出力をフィルター処理します。 プロセス オブジェクトは、パイプラインからコマンドレットに Select-Object 送信されます。 Select-Objectでは、Property パラメーターを使用して、プロセス オブジェクトプロパティのサブセットを選択します。 プロセス オブジェクトは、パイプラインからコマンドレットに Export-Csv 送信されます。 Export-Csv は、プロセス オブジェクトを一連の CSV 文字列に変換します。 Path パラメーターは、ファイルが現在のWmiData.csvディレクトリに保存されることを指定します。 NoTypeInformation パラメーターは、csv 出力から #TYPE 情報ヘッダーを削除します。PowerShell 6 では必要ありません。 このコマンドレットではImport-Csv、Path パラメーターを使用して、現在のディレクトリにあるファイルを表示します。

例 2: プロセスをコンマ区切りファイルにエクスポートする

この例では、Process オブジェクトを取得し、オブジェクトを CSV ファイルにエクスポートします。

Get-Process | Export-Csv -Path .\Processes.csv -NoTypeInformation
Get-Content -Path .\Processes.csv

"Name","SI","Handles","VM","WS","PM","NPM","Path","Parent","Company","CPU","FileVersion", ...
"ApplicationFrameHost","4","511","2203597099008","35364864","21979136","30048", ...

このコマンドレットはGet-Process、Process オブジェクトを取得します。 プロセス オブジェクトは、パイプラインからコマンドレットに Export-Csv 送信されます。 Export-Csv は、プロセス オブジェクトを一連の CSV 文字列に変換します。 Path パラメーターは、ファイルが現在のProcesses.csvディレクトリに保存されることを指定します。 NoTypeInformation パラメーターは、csv 出力から #TYPE 情報ヘッダーを削除します。PowerShell 6 では必要ありません。 このコマンドレットではGet-Content、Path パラメーターを使用して、現在のディレクトリにあるファイルを表示します。

例 3: セミコロンで区切られたファイルにプロセスをエクスポートする

この例では、Process オブジェクトを取得し、セミコロン区切り記号でファイルにオブジェクトをエクスポートします。

Get-Process | Export-Csv -Path .\Processes.csv -Delimiter ';' -NoTypeInformation
Get-Content -Path .\Processes.csv

"Name";"SI";"Handles";"VM";"WS";"PM";"NPM";"Path";"Parent";"Company";"CPU";"FileVersion"; ...
"ApplicationFrameHost";"4";"509";"2203595321344";"34807808";"21770240";"29504"; ...

このコマンドレットはGet-Process、Process オブジェクトを取得します。 プロセス オブジェクトは、パイプラインからコマンドレットに Export-Csv 送信されます。 Export-Csv は、プロセス オブジェクトを一連の CSV 文字列に変換します。 Path パラメーターは、ファイルが現在のProcesses.csvディレクトリに保存されることを指定します。 Delimiter パラメーターは、文字列値を区切るセミコロンを指定します。 NoTypeInformation パラメーターは、csv 出力から #TYPE 情報ヘッダーを削除します。PowerShell 6 では必要ありません。 このコマンドレットではGet-Content、Path パラメーターを使用して、現在のディレクトリにあるファイルを表示します。

例 4: 現在のカルチャのリスト区切り記号を使用してプロセスをエクスポートする

この例では、Process オブジェクトを取得し、オブジェクトをファイルにエクスポートします。 区切り記号は、現在のカルチャのリスト区切り記号です。

(Get-Culture).TextInfo.ListSeparator
Get-Process | Export-Csv -Path .\Processes.csv -UseCulture -NoTypeInformation
Get-Content -Path .\Processes.csv

"Name","SI","Handles","VM","WS","PM","NPM","Path","Parent","Company","CPU","FileVersion", ...
"ApplicationFrameHost","4","511","2203597099008","35364864","21979136","30048", ...

このコマンドレットは Get-Culture 、入れ子になったプロパティ TextInfoListSeparator を使用し、現在のカルチャの既定のリスト区切り記号を表示します。 このコマンドレットはGet-Process、Process オブジェクトを取得します。 プロセス オブジェクトは、パイプラインからコマンドレットに Export-Csv 送信されます。 Export-Csv は、プロセス オブジェクトを一連の CSV 文字列に変換します。 Path パラメーターは、ファイルが現在のProcesses.csvディレクトリに保存されることを指定します。 UseCulture パラメーターは、現在のカルチャの既定のリスト区切り記号を区切り記号として使用します。 NoTypeInformation パラメーターは、csv 出力から #TYPE 情報ヘッダーを削除します。PowerShell 6 では必要ありません。 このコマンドレットではGet-Content、Path パラメーターを使用して、現在のディレクトリにあるファイルを表示します。

例 5: 型情報を含むプロセスをエクスポートする

この例では、#TYPE ヘッダー情報を CSV ファイルに含める方法について説明します。 #TYPE ヘッダーは、PowerShell 6.0 より前のバージョンでは既定値です。

Get-Process | Export-Csv -Path .\Processes.csv
Get-Content -Path .\Processes.csv

#TYPE System.Diagnostics.Process
"Name","SI","Handles","VM","WS","PM","NPM","Path","Company","CPU","FileVersion", ...
"ApplicationFrameHost","4","507","2203595001856","35139584","20934656","29504", ...

このコマンドレットはGet-Process、Process オブジェクトを取得します。 プロセス オブジェクトは、パイプラインからコマンドレットに Export-Csv 送信されます。 Export-Csv は、プロセス オブジェクトを一連の CSV 文字列に変換します。 Path パラメーターは、ファイルが現在のProcesses.csvディレクトリに保存されることを指定します。 このコマンドレットではGet-Content、Path パラメーターを使用して、現在のディレクトリにあるファイルを表示します。

例 6: CSV ファイルにオブジェクトをエクスポートして追加する

この例では、CSV ファイルにオブジェクトをエクスポートし、Append パラメーターを使用して既存のファイルにオブジェクトを追加する方法について説明します。

$AppService = (Get-Service -DisplayName *Application* | Select-Object -Property DisplayName, Status)
$AppService | Export-Csv -Path .\Services.Csv -NoTypeInformation
Get-Content -Path .\Services.Csv
$WinService = (Get-Service -DisplayName *Windows* | Select-Object -Property DisplayName, Status)
$WinService | Export-Csv -Path .\Services.csv -NoTypeInformation -Append
Get-Content -Path .\Services.Csv

"DisplayName","Status"
"Application Layer Gateway Service","Stopped"
"Application Identity","Running"
"Windows Audio Endpoint Builder","Running"
"Windows Audio","Running"
"Windows Event Log","Running"

コマンドレットは Get-Service サービス オブジェクトを取得します。 DisplayName パラメーターは、Application という単語を含むサービスを返します。 サービス オブジェクトは、パイプラインからコマンドレットに Select-Object 送信されます。 Select-Objectでは、Property パラメーターを使用して DisplayName プロパティと Status プロパティを指定します。 変数には $AppService オブジェクトが格納されます。

オブジェクトは $AppService 、パイプラインからコマンドレットに Export-Csv 送信されます。 Export-Csv は、サービス オブジェクトを一連の CSV 文字列に変換します。 Path パラメーターは、ファイルが現在のServices.csvディレクトリに保存されることを指定します。 NoTypeInformation パラメーターは、csv 出力から #TYPE 情報ヘッダーを削除します。PowerShell 6 では必要ありません。 このコマンドレットではGet-Content、Path パラメーターを使用して、現在のディレクトリにあるファイルを表示します。

Get-Service Windows という単語を含むサービスでは、コマンドレットとSelect-Objectコマンドレットが繰り返されます。 変数には $WinService サービス オブジェクトが格納されます。 このコマンドレットではExport-Csv、Append パラメーターを使用して、オブジェクトが既存Services.csv$WinServiceファイルに追加されるように指定します。 コマンドレットが Get-Content 繰り返され、追加されたデータを含む更新されたファイルが表示されます。

例 7: パイプライン内の Format コマンドレットによって予期しない結果が作成される

この例では、パイプライン内で format コマンドレットを使用しないことが重要である理由を示します。 予期しない出力が受信されたら、パイプライン構文のトラブルシューティングを行います。

Get-Date | Select-Object -Property DateTime, Day, DayOfWeek, DayOfYear |
 Export-Csv -Path .\DateTime.csv -NoTypeInformation
Get-Content -Path .\DateTime.csv

"DateTime","Day","DayOfWeek","DayOfYear"
"Wednesday, January 2, 2019 14:59:34","2","Wednesday","2"

Get-Date | Format-Table -Property DateTime, Day, DayOfWeek, DayOfYear |
 Export-Csv -Path .\FTDateTime.csv -NoTypeInformation
Get-Content -Path .\FTDateTime.csv

"ClassId2e4f51ef21dd47e99d3c952918aff9cd","pageHeaderEntry","pageFooterEntry","autosizeInfo", ...
"033ecb2bc07a4d43b5ef94ed5a35d280",,,,"Microsoft.PowerShell.Commands.Internal.Format. ...
"9e210fe47d09416682b841769c78b8a3",,,,,
"27c87ef9bbda4f709f6b4002fa4af63c",,,,,
"4ec4f0187cb04f4cb6973460dfe252df",,,,,
"cf522b78d86c486691226b40aa69e95c",,,,,

コマンドレットは Get-Date DateTime オブジェクトを取得します。 オブジェクトは、パイプラインからコマンドレットに Select-Object 送信されます。 Select-Objectでは、Property パラメーターを使用してオブジェクト プロパティのサブセットを選択します。 オブジェクトは、パイプラインからコマンドレットに Export-Csv 送信されます。 Export-Csv は、オブジェクトを CSV 形式に変換します。 Path パラメーターは、ファイルが現在のDateTime.csvディレクトリに保存されることを指定します。 NoTypeInformation パラメーターは、csv 出力から #TYPE 情報ヘッダーを削除します。PowerShell 6 では必要ありません。 このコマンドレットではGet-Content、Path パラメーターを使用して、現在のディレクトリにある CSV ファイルを表示します。

パイプライン内でコマンドレットを Format-Table 使用してプロパティを選択すると、予期しない結果が受信されます。 Format-Tableは、DateTime オブジェクトではなく、パイプラインの下にExport-Csvテーブル形式オブジェクトを送信します。 Export-Csv は、テーブル形式オブジェクトを一連の CSV 文字列に変換します。 このコマンドレットは Get-Content 、テーブル形式オブジェクトを含む CSV ファイルを表示します。

例 8: Force パラメーターを使用して読み取り専用ファイルを上書きする

この例では、空の読み取り専用ファイルを作成し、Force パラメーターを使用してファイルを更新します。

New-Item -Path .\ReadOnly.csv -ItemType File
Set-ItemProperty -Path .\ReadOnly.csv -Name IsReadOnly -Value $true
Get-Process | Export-Csv -Path .\ReadOnly.csv -NoTypeInformation

Export-Csv : Access to the path 'C:\ReadOnly.csv' is denied.
At line:1 char:15
+ Get-Process | Export-Csv -Path .\ReadOnly.csv -NoTypeInformation
+               ~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : OpenError: (:) [Export-Csv], UnauthorizedAccessException
+ FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.ExportCsvCommand

Get-Process | Export-Csv -Path .\ReadOnly.csv -NoTypeInformation -Force
Get-Content -Path .\ReadOnly.csv

"Name";"SI";"Handles";"VM";"WS";"PM";"NPM";"Path";"Parent";"Company";"CPU";"FileVersion"; ...
"ApplicationFrameHost";"4";"509";"2203595321344";"34807808";"21770240";"29504"; ...

このコマンドレットでは New-ItemPath パラメーターと ItemType パラメーターを使用して、現在の ReadOnly.csv ディレクトリにファイルを作成します。 このコマンドレットでは Set-ItemPropertyName パラメーターと Value パラメーターを使用して、ファイルの IsReadOnly プロパティを true に 変更します。 このコマンドレットはGet-Process、Process オブジェクトを取得します。 プロセス オブジェクトは、パイプラインからコマンドレットに Export-Csv 送信されます。 Export-Csv は、プロセス オブジェクトを一連の CSV 文字列に変換します。 Path パラメーターは、ファイルが現在のReadOnly.csvディレクトリに保存されることを指定します。 NoTypeInformation パラメーターは、csv 出力から #TYPE 情報ヘッダーを削除します。PowerShell 6 では必要ありません。 アクセスが拒否されたため、ファイルが書き込まれていないことが出力に示されます。

Force パラメーターがコマンドレットにExport-Csv追加され、エクスポートがファイルに書き込まれるよう強制されます。 このコマンドレットではGet-Content、Path パラメーターを使用して、現在のディレクトリにあるファイルを表示します。

例 9: Force パラメーターを Append と共に使用する

この例では、Force パラメーターと Append パラメーターを使用する方法を示します。 これらのパラメーターを組み合わせると、不一致のオブジェクト プロパティを CSV ファイルに書き込むことができます。

$Content = [PSCustomObject]@{Name = 'PowerShell'; Version = '7.0'}
$Content | Export-Csv -Path .\ParmFile.csv -NoTypeInformation
$AdditionalContent = [PSCustomObject]@{Name = 'Windows PowerShell'; Edition = 'Desktop'}
$AdditionalContent | Export-Csv -Path .\ParmFile.csv -NoTypeInformation -Append

Export-Csv : Cannot append CSV content to the following file: ParmFile.csv.
The appended object does not have a property that corresponds to the following column:
Version. To continue with mismatched properties, add the -Force parameter, and then retry
 the command.
At line:1 char:22
+ $AdditionalContent | Export-Csv -Path .\ParmFile.csv -NoTypeInformation -Append
+                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidData: (Version:String) [Export-Csv], InvalidOperationException
+ FullyQualifiedErrorId : CannotAppendCsvWithMismatchedPropertyNames,Microsoft.PowerShell. ...

$AdditionalContent | Export-Csv -Path .\ParmFile.csv -NoTypeInformation -Append -Force
Import-Csv -Path .\ParmFile.csv

Name               Version
----               -------
PowerShell         7.0
Windows PowerShell

式は、Name プロパティと Version プロパティを使用して PSCustomObject を作成します。 値は変数に $Content 格納されます。 変数は $Content 、パイプラインからコマンドレットに Export-Csv 送信されます。 Export-Csvは Path パラメーターを使用し、ファイルをParmFile.csv現在のディレクトリに保存します。 NoTypeInformation パラメーターは、csv 出力から #TYPE 情報ヘッダーを削除します。PowerShell 6 では必要ありません。

別の式では、Name プロパティと Edition プロパティを使用して PSCustomObject が作成されます。 値は変数に $AdditionalContent 格納されます。 変数は $AdditionalContent 、パイプラインからコマンドレットに Export-Csv 送信されます。 Append パラメーターは、ファイルにデータを追加するために使用されます。 バージョンとエディションの間にプロパティ名の不一致があるため、追加が失敗します。

コマンドレット Force Export-Csv パラメーターは、エクスポートを強制的にファイルに書き込むのに使用されます。 Edition プロパティはカードされません。 このコマンドレットではImport-Csv、Path パラメーターを使用して、現在のディレクトリにあるファイルを表示します。

パラメーター

-Append

指定したファイルの末尾に Export-CSV CSV 出力を追加するには、このパラメーターを使用します。 このパラメーターを指定しない場合は、 Export-CSV 警告なしでファイルの内容を置き換えます。

このパラメーターは Windows PowerShell 3.0 で導入されました。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

コマンドレットの実行前に確認を求めるメッセージが表示されます。

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Delimiter

プロパティの値を区切る区切り記号を指定します。 既定値はコンマ (,) です。 コロン (:) などの文字を入力します。 セミコロン (;) を指定するには、引用符で囲みます。

Type:Char
Position:1
Default value:comma (,)
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Encoding

エクスポートされた CSV ファイルのエンコード方式を指定します。 既定値は ASCII です。

このパラメーターに使用できる値は次のとおりです。

  • ASCII ASCII (7 ビット) 文字セットを使用します。
  • BigEndianUnicode ビッグ エンディアンバイト順で UTF-16 を使用します。
  • Default システムのアクティブなコード ページ (通常は ANSI) に対応するエンコードを使用します。
  • OEM システムの現在の OEM コード ページに対応するエンコードを使用します。
  • Unicode リトル エンディアン バイト順で UTF-16 を使用します。
  • UTF7 UTF-7 を使用します。
  • UTF8 UTF-8 を使用します。
  • UTF32 リトル エンディアンバイト順で UTF-32 を使用します。
Type:String
Accepted values:ASCII, BigEndianUnicode, Default, OEM, Unicode, UTF7, UTF8, UTF32
Position:Named
Default value:ASCII
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Force

このパラメーターを使用すると、Export-Csvファイルを読み取り専用属性で上書きできます。

Force パラメーターと Append パラメーターを組み合わせると、プロパティが一致しないオブジェクトを CSV ファイルに書き込むことができます。 一致するプロパティのみがファイルに書き込まれます。 一致しないプロパティはカードされません。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

CSV 文字列としてエクスポートするオブジェクトを指定します。 オブジェクトが格納されている変数を入力するか、オブジェクトを取得するコマンドまたは式を入力します。 オブジェクトをパイプ処理することもできます Export-CSV

Type:PSObject
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

CSV 出力ファイルのパスを指定します。 Path とは異なり、LiteralPath パラメーターの値は、型指定されたとおりに使用されます。 ワイルドカードとして解釈される文字はありません。 パスにエスケープ文字が含まれている場合は、単一引用符を使用します。 単一引用符は、エスケープ シーケンスとして文字を解釈しないように PowerShell に指示します。

Type:String
Aliases:PSPath
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-NoClobber

既存のファイルを上書きしないように、 Export-CSV このパラメーターを使用します。 既定では、指定したパスにファイルが存在する場合は、 Export-CSV 警告なしでファイルを上書きします。

Type:SwitchParameter
Aliases:NoOverwrite
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-NoTypeInformation

#TYPE出力から情報ヘッダーを削除します。 このパラメーターは PowerShell 6.0 の既定値となり、下位互換性のために含まれています。

Type:SwitchParameter
Aliases:NTI
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

CSV 出力ファイルを保存する場所を指定する必須のパラメーター。

Type:String
Position:0
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UseCulture

現在のカルチャのリスト区切り記号を項目区切り記号として使用します。 カルチャのリスト区切り記号を検索するには、次のコマンドを使用します (Get-Culture).TextInfo.ListSeparator

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

コマンドレットが処理または変更されないようにします。 出力には、コマンドレットが実行された場合の動作が示されます。

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

入力

PSObject

拡張型システム (ETS) アダプターを使用して任意のオブジェクトをこのコマンドレットにパイプできます。

出力

None

このコマンドレットは、出力を返しません。

メモ

Windows PowerShell には、次のエイリアスが Export-Csv含まれています。

  • epcsv

コマンドレットは Export-CSV 、送信したオブジェクトを一連の CSV 文字列に変換し、指定されたテキスト ファイルに保存します。 Export-CSV CSV ファイルにオブジェクトを保存し、コマンドレットをImport-Csv使用して CSV ファイルからオブジェクトを作成できます。

CSV ファイルでは、各オブジェクトは、オブジェクトのプロパティ値の文字区切りのリストで表されます。 プロパティ値は、ToString() メソッドを使用して文字列に変換されます。 文字列はプロパティ値の名前で表されます。 'Export-CSV では、オブジェクトのメソッドはエクスポートされません。

CSV 文字列は次のように出力されます。

  • 既定では、最初の文字列には、#TYPE 情報ヘッダーの後にオブジェクト型の完全修飾名が続きます。 たとえば、 System.Diagnostics.Process #TYPE します。
  • NoTypeInformation を使用する場合、最初の文字列には列ヘッダーが含まれます。 ヘッダーには、最初のオブジェクトのプロパティ名が文字区切りリストとして含まれています。
  • reメイン 文字列には、各オブジェクトのプロパティ値の文字区切りのリストが含まれています。

複数のオブジェクトを Export-CSV送信する場合は、 Export-CSV 最初に送信したオブジェクトのプロパティに基づいてファイルを整理します。 指定したプロパティのいずれかが残りのオブジェクトに含まれない場合、そのオブジェクトのプロパティ値は連続する 2 つのコンマで表される null になります。 残りのオブジェクトに追加のプロパティがある場合は、これらのプロパティ値は、ファイルには含まれません。

コマンドレットを Import-Csv 使用して、ファイル内の CSV 文字列からオブジェクトを再作成できます。 結果のオブジェクトは、メソッドのない、プロパティ値の文字列形式で構成された元のオブジェクトの CSV バージョンです。

およびConvertFrom-CsvコマンドレットはConvertTo-Csv、オブジェクトを CSV 文字列と CSV 文字列に変換します。 Export-CSV は、CSV 文字列をファイルに保存する点を除き、同じです ConvertTo-CSV