Import-Csv

文字区切り値 (CSV) ファイル内の項目からテーブルのようなカスタム オブジェクトを作成します。

構文

Import-Csv
      [[-Delimiter] <Char>]
      [-Path] <String[]>
      [-Header <String[]>]
      [-Encoding <Encoding>]
      [<CommonParameters>]
Import-Csv
      [[-Delimiter] <Char>]
      -LiteralPath <String[]>
      [-Header <String[]>]
      [-Encoding <Encoding>]
      [<CommonParameters>]
Import-Csv
      [-Path] <String[]>
      -UseCulture
      [-Header <String[]>]
      [-Encoding <Encoding>]
      [<CommonParameters>]
Import-Csv
      -LiteralPath <String[]>
      -UseCulture
      [-Header <String[]>]
      [-Encoding <Encoding>]
      [<CommonParameters>]

説明

このコマンドレットは Import-Csv 、CSV ファイル内の項目からテーブルのようなカスタム オブジェクトを作成します。 CSV ファイルの各列がカスタム オブジェクトのプロパティになり、行内の項目がプロパティ値になります。 Import-Csv は、コマンドレットによって生成されたファイルを含むすべての CSV ファイルで Export-Csv 機能します。

コマンドレットの Import-Csv パラメーターを使用して列ヘッダー行と項目区切り記号を指定したり Import-Csv 、現在のカルチャのリスト区切り記号を項目区切り記号として直接使用したりできます。

また、and ConvertFrom-Csv コマンドレットをConvertTo-Csv使用して、オブジェクトを CSV 文字列 (および戻る) に変換することもできます。 これらのコマンドレットは、ファイルを Export-CSV 処理しない点を除き、コマンドレットと Import-Csv 同じです。

CSV ファイル内のヘッダー行エントリに空または null 値が含まれている場合、PowerShell は既定のヘッダー行名を挿入し、警告メッセージを表示します。

PowerShell 6.0 以降では、 Import-Csv W3C 拡張ログ ファイル形式がサポートされるようになりました。

例 1: プロセス オブジェクトをインポートする

この例では、プロセス オブジェクトの CSV ファイルをエクスポートしてインポートする方法を示します。

Get-Process | Export-Csv -Path .\Processes.csv
$P = Import-Csv -Path .\Processes.csv
$P | Get-Member

TypeName: System.Management.Automation.PSCustomObject

Name                       MemberType   Definition
----                       ----------   ----------
Equals                     Method       bool Equals(System.Object obj)
GetHashCode                Method       int GetHashCode()
GetType                    Method       type GetType()
ToString                   Method       string ToString()
BasePriority               NoteProperty string BasePriority=8
Company                    NoteProperty string Company=Microsoft Corporation
...

$P | Format-Table

Name                   SI Handles VM            WS        PM        NPM    Path
----                   -- ------- --            --        --        ---    ----
ApplicationFrameHost   4  407     2199293489152 15884288  15151104  23792  C:\WINDOWS\system32\ApplicationFrameHost.exe
...
wininit                0  157     2199112204288 4591616   1630208   10376
winlogon               4  233     2199125549056 7659520   2826240   10992  C:\WINDOWS\System32\WinLogon.exe
WinStore.App           4  846     873435136     33652736  26607616  55432  C:\Program Files\WindowsApps\Microsoft.WindowsStore_11712.1001.13.0_x64__8weky...
WmiPrvSE               0  201     2199100219392 8830976   3297280   10632  C:\WINDOWS\system32\wbem\wmiprvse.exe
WmiPrvSE               0  407     2199157727232 18509824  12922880  16624  C:\WINDOWS\system32\wbem\wmiprvse.exe
WUDFHost               0  834     2199310204928 51945472  87441408  24984  C:\Windows\System32\WUDFHost.exe

このコマンドレットは Get-Process 、プロセス オブジェクトをパイプラインの下に送信します Export-Csv。 このコマンドレットは Export-Csv 、プロセス オブジェクトを CSV 文字列に変換し、その文字列を Processes.csv ファイルに保存します。 コマンドレットは Import-Csv 、Processes.csv ファイルから CSV 文字列をインポートします。 文字列は変数に $P 保存されます。 変数は $P 、インポートされた CSV 文字列のプロパティを Get-Member 表示するコマンドレットにパイプラインを送信します。 変数は $P パイプラインからコマンドレットに Format-Table 送信され、オブジェクトが表示されます。

例 2: 区切り記号を指定する

この例では、コマンドレットの Delimiter パラメーターを使用する方法をImport-Csv示します。

Get-Process | Export-Csv -Path .\Processes.csv -Delimiter :
$P = Import-Csv -Path .\Processes.csv -Delimiter :
$P | Format-Table

このコマンドレットは Get-Process 、パイプラインの下にプロセス オブジェクトを送信します Export-Csv。 このコマンドレットは Export-Csv 、プロセス オブジェクトを CSV 文字列に変換し、その文字列を Processes.csv ファイルに保存します。 Delimiter パラメーターは、コロン区切り記号を指定するために使用されます。 コマンドレットは Import-Csv 、Processes.csv ファイルから CSV 文字列をインポートします。 文字列は変数に $P 保存されます。 To $P 変数は、パイプラインをコマンドレットに Format-Table 送信します。

例 3: 区切り記号の現在のカルチャを指定する

この例では、UseCulture パラメーターでコマンドレットをImport-Csv使用する方法を示します。

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

このコマンドレットは Get-Culture 、入れ子になったプロパティ TextInfoListSeparator を使用して、現在のカルチャの既定のリスト区切り記号を取得します。 このコマンドレットは Get-Process 、パイプラインの下にプロセス オブジェクトを送信します Export-Csv。 このコマンドレットは Export-Csv 、プロセス オブジェクトを CSV 文字列に変換し、その文字列を Processes.csv ファイルに保存します。 UseCulture パラメーターは、現在のカルチャの既定のリスト区切り記号を使用します。 コマンドレットは Import-Csv 、Processes.csv ファイルから CSV 文字列をインポートします。

例 4: インポートしたオブジェクトのプロパティ名を変更する

この例では、Header パラメーターImport-Csv使用して、結果としてインポートされたオブジェクトのプロパティの名前を変更する方法を示します。

Start-Job -ScriptBlock { Get-Process } | Export-Csv -Path .\Jobs.csv -NoTypeInformation
$Header = 'State', 'MoreData', 'StatusMessage', 'Location', 'Command', 'StateInfo', 'Finished',
          'InstanceId', 'Id', 'Name', 'ChildJobs', 'BeginTime', 'EndTime', 'JobType', 'Output',
          'Error', 'Progress', 'Verbose', 'Debug', 'Warning', 'Information'
# Delete the default header from file
$A = Get-Content -Path .\Jobs.csv
$A = $A[1..($A.Count - 1)]
$A | Out-File -FilePath .\Jobs.csv
$J = Import-Csv -Path .\Jobs.csv -Header $Header
$J

State         : Running
MoreData      : True
StatusMessage :
Location      : localhost
Command       : Get-Process
StateInfo     : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : a259eb63-6824-4b97-a033-305108ae1c2e
Id            : 1
Name          : Job1
ChildJobs     : System.Collections.Generic.List`1[System.Management.Automation.Job]
BeginTime     : 12/20/2018 18:59:57
EndTime       :
JobType       : BackgroundJob
Output        : System.Management.Automation.PSDataCollection`1[System.Management.Automation.PSObject]
Error         : System.Management.Automation.PSDataCollection`1[System.Management.Automation.ErrorRecord]
Progress      : System.Management.Automation.PSDataCollection`1[System.Management.Automation.ProgressRecord]
Verbose       : System.Management.Automation.PSDataCollection`1[System.Management.Automation.VerboseRecord]
Debug         : System.Management.Automation.PSDataCollection`1[System.Management.Automation.DebugRecord]
Warning       : System.Management.Automation.PSDataCollection`1[System.Management.Automation.WarningRecord]
Information   : System.Management.Automation.PSDataCollection`1[System.Management.Automation.InformationRecord]

コマンドレットは Start-Job 、実行 Get-Processするバックグラウンド ジョブを開始します。 ジョブ オブジェクトは、パイプラインからコマンドレットに Export-Csv 送信され、CSV 文字列に変換されます。 NoTypeInformation パラメーターは、CSV 出力から型情報ヘッダーを削除し、PowerShell v6 以降では省略可能です。 この$Header変数には、HasMoreData、JobStateInfo、PSBeginTimeP Standard Edition ndTime、PSJobTypeName の既定値を置き換えるカスタム ヘッダーが含まれています。 この変数は $A 、コマンドレットを Get-Content 使用して Jobs.csv ファイルから CSV 文字列を取得します。 この $A 変数は、ファイルから既定のヘッダーを削除するために使用されます。 このコマンドレットは Out-File 、新しいバージョンの Jobs.csv ファイルを変数に $A 保存します。 コマンドレットは Import-Csv Jobs.csv ファイルをインポートし、Header パラメーターを使用して変数を$Header適用します。 この変数には $J 、インポートされた PSCustomObject が 含まれており、PowerShell コンソールにオブジェクトが表示されます。

例 5: CSV ファイルを使用してカスタム オブジェクトを作成する

この例では、CSV ファイルを使用して PowerShell でカスタム オブジェクトを作成する方法を示します。

Get-Content -Path .\Links.csv

113207,about_Aliases
113208,about_Arithmetic_Operators
113209,about_Arrays
113210,about_Assignment_Operators
113212,about_Automatic_Variables
113213,about_Break
113214,about_Command_Precedence
113215,about_Command_Syntax
144309,about_Comment_Based_Help
113216,about_CommonParameters
113217,about_Comparison_Operators
113218,about_Continue
113219,about_Core_Commands
113220,about_Data_Section

$A = Import-Csv -Path .\Links.csv -Header 'LinkID', 'TopicTitle'
$A | Get-Member

TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
LinkID      NoteProperty string LinkID=113207
TopicTitle  NoteProperty string TopicTitle=about_Aliases

$A | Where-Object -Property TopicTitle -Like '*alias*'

LinkID TopicTitle
------ ----------
113207 about_Aliases

Links.csv ファイルを作成するには、出力に示されている値を Get-Content 使用します。

このコマンドレットは Get-Content Links.csv ファイルを表示します。 コマンドレットは Import-Csv Links.csv ファイルをインポートします。 Header パラメーターは、LinkIdTopicTitle というプロパティ名を指定します。 オブジェクトは変数に $A 格納されます。 このコマンドレットはGet-Member、Header パラメーターのプロパティ名を示します。 コマンドレットはWhere-Object、エイリアスを含む TopicTitle プロパティをつオブジェクトを選択します

例 6: 値がない CSV をインポートする

この例では、 Import-Csv CSV ファイルのヘッダー行に null または空の値が含まれている場合に、PowerShell のコマンドレットがどのように応答するかを示します。 Import-Csv は、返されるオブジェクト Import-Csv のプロパティ名になる、見つからないヘッダー行の既定の名前に置き換えます。

Get-Content -Path .\Projects.csv

ProjectID,ProjectName,,Completed
13,Inventory,Redmond,True
440,,FarEast,True
469,Marketing,Europe,False

Import-Csv -Path .\Projects.csv

WARNING: One or more headers were not specified. Default names starting with "H" have been used in
place of any missing headers.

ProjectID ProjectName H1      Completed
--------- ----------- --      ---------
13        Inventory   Redmond True
440                   FarEast True
469       Marketing   Europe  False

(Import-Csv -Path .\Projects.csv).H1

WARNING: One or more headers were not specified. Default names starting with "H" have been used in
place of any missing headers.
Redmond
FarEast
Europe

Projects.csv ファイルを作成するには、例 Get-Content の出力に示されている値を使用します。

このコマンドレットは Get-Content Projects.csv ファイルを表示します。 ヘッダー行に ProjectNameCompleted の間に値がありません。 このコマンドレットは Import-Csv Projects.csv ファイルをインポートし、H1 が既定のヘッダー名であるため、警告メッセージを表示します。 このコマンドは (Import-Csv -Path .\Projects.csv).H1 H1 プロパティ値を取得し、警告を表示します。

パラメーター

-Delimiter

CSV ファイル内のプロパティ値を区切る区切り記号を指定します。 既定値はコンマ (,) です。

コロン (:) などの文字を入力します。 セミコロン (;) を指定するには、単一引用符で囲みます。 tab (`t) などのエスケープされた特殊文字を指定するには、二重引用符で囲みます。

ファイルに実際の文字列区切り記号以外の文字を指定した場合、 Import-Csv CSV 文字列からオブジェクトを作成できず、CSV 文字列が返されます。

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

-Encoding

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

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

  • ascii: ASCII (7 ビット) 文字セットのエンコードを使用します。
  • bigendianunicode: ビッグ エンディアンバイト順を使用して UTF-16 形式でエンコードします。
  • bigendianutf32: ビッグ エンディアンバイト順を使用して UTF-32 形式でエンコードします。
  • oem: MS-DOS およびコンソール プログラムの既定のエンコードを使用します。
  • unicode: リトル エンディアンバイト順を使用して UTF-16 形式でエンコードします。
  • utf7: UTF-7 形式でエンコードします。
  • utf8: UTF-8 形式でエンコードします。
  • utf8BOM: バイト オーダー マーク (BOM) を使用して UTF-8 形式でエンコードします。
  • utf8NoBOM: バイト オーダー マーク (BOM) を使用せずに UTF-8 形式でエンコードします。
  • utf32: UTF-32 形式でエンコードします。

PowerShell 6.2 以降では、Encoding パラメーターを使用すると、登録済みコード ページの数値 ID (いいね) -Encoding 1251や登録済みコード ページの文字列名 (例-Encoding "windows-1251") も使用できます。 詳細については、Encoding.CodePage の .NET ドキュメントを 参照してください

Note

UTF-7* の使用は推奨されなくなりました。 PowerShell 7.1 の時点で、Encoding パラメーターに指定utf7すると警告が書き込まれます。

Type:Encoding
Accepted values:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Position:Named
Default value:UTF8NoBOM
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Header

インポートされたファイルの代替列ヘッダー行を指定します。 列ヘッダーは、によって Import-Csv作成されるオブジェクトのプロパティ名を決定します。

列ヘッダーを文字区切りリストとして入力します。 ヘッダー文字列は引用符で囲まないでください。 各列ヘッダーを単一引用符で囲みます。

データ列よりも少ない列ヘッダーを入力すると、再メインデータ列はカード解除されます。 データ列よりも多くの列ヘッダーを入力すると、空のデータ列で追加の列ヘッダーが作成されます。

Header パラメーターを使用する場合は、CSV ファイルから元のヘッダー行を削除します。 それ以外の場合は、 Import-Csv ヘッダー行の項目から追加のオブジェクトを作成します。

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-LiteralPath

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

Type:String[]
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Path

インポートする CSV ファイルのパスを指定します。 パス Import-Csvをパイプすることもできます。

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

-UseCulture

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

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

入力

String

このコマンドレットへのパスを含む文字列をパイプ処理できます。

出力

Object

このコマンドレットは、CSV ファイル内のコンテンツによって記述されたオブジェクトを返します。

メモ

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

  • すべてのプラットフォーム:
    • ipcsv

インポートされたオブジェクトはオブジェクト型の CSV バージョンであるため、オブジェクト型の CSV 以外のバージョンを書式設定する PowerShell 型の書式設定エントリでは認識および書式設定されません。

コマンドの Import-Csv 結果は、テーブルのようなカスタム オブジェクトを形成する文字列のコレクションです。 各行は個別の文字列であるため、オブジェクトの Count プロパティを使用してテーブル行をカウントできます。 列はオブジェクトのプロパティであり、行内の項目はプロパティの値です。

列ヘッダー行により、列の数と列名が決定されます。 列名は、オブジェクトのプロパティの名前でもあります。 Header パラメーターを使用して列ヘッダーを指定しない限り、最初の行は列ヘッダーと解釈されます。 いずれかの行にヘッダー行よりも多くの値が含まれる場合、追加の値は無視されます。

列ヘッダー行に値がないか、null または空の値が含まれている場合は、H を使用し、Import-Csvその後に不足している列ヘッダーとプロパティ名の番号を使用します。

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

Import-Csv W3C 拡張ログ形式もサポートしています。 先頭の # 行はコメントとして扱われ、コメントの先頭 #Fields: に列名の区切りリストが含まれている場合を除き、無視されます。 その場合、コマンドレットはこれらの列名を使用します。 これは、Windows IIS およびその他の Web サーバー ログの標準形式です。 詳細については、「拡張ログ ファイル形式」を参照してください