次の方法で共有


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 パラメーターは、WmiPrvSE プロセス オブジェクトのみを含むように出力をフィルター処理します。 プロセス オブジェクトは、パイプラインから 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 コマンドレットは、TextInfo 入れ子になったプロパティを使用し、ListSeparator し、現在のカルチャの既定のリスト区切り記号を表示します。 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 コマンドレットと Select-Object コマンドレットは、Windows という単語を含むサービスに対して繰り返されます。 $WinService 変数には、サービス オブジェクトが格納されます。 Export-Csv コマンドレットは、Append パラメーターを使用して、$WinService オブジェクトを既存の Services.csv ファイルに追加することを指定します。 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 は、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-Item コマンドレットは、パスItemType パラメーターを使用して、現在のディレクトリに ReadOnly.csv ファイルを作成します。 Set-ItemProperty コマンドレットは、Name パラメーターと 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

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

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

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

パラメーター

-Append

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

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

型:SwitchParameter
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Confirm

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

型:SwitchParameter
Aliases:cf
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Delimiter

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

型:Char
配置:1
規定値:comma (,)
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る: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 を使用します。
型:String
指定可能な値:ASCII, BigEndianUnicode, Default, OEM, Unicode, UTF7, UTF8, UTF32
配置:Named
規定値:ASCII
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Force

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

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

型:SwitchParameter
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-InputObject

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

型:PSObject
配置:Named
規定値:None
必須:True
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-LiteralPath

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

型:String
Aliases:PSPath
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-NoClobber

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

型:SwitchParameter
Aliases:NoOverwrite
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-NoTypeInformation

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

型:SwitchParameter
Aliases:NTI
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Path

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

型:String
配置:0
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-UseCulture

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

型:SwitchParameter
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-WhatIf

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

型:SwitchParameter
Aliases:wi
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る: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 使用する場合、最初の文字列には列ヘッダーが含まれます。 ヘッダーには、最初のオブジェクトのプロパティ名が文字区切りリストとして含まれています。
  • 残りの文字列には、各オブジェクトのプロパティ値の文字区切りのリストが含まれています。

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

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

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