Import-Csv
文字区切り値 (CSV) ファイル内の項目からテーブルのようなカスタム オブジェクトを作成します。
構文
Import-Csv
[[-Path] <string[]>]
[[-Delimiter] <char>]
[-LiteralPath <string[]>]
[-Header <string[]>]
[-Encoding <string>]
[<CommonParameters>]
Import-Csv
[[-Path] <string[]>]
-UseCulture
[-LiteralPath <string[]>]
[-Header <string[]>]
[-Encoding <string>]
[<CommonParameters>]
説明
Import-Csv
コマンドレットは、CSV ファイル内の項目からテーブルのようなカスタム オブジェクトを作成します。 CSV ファイル内の各列はカスタム オブジェクトのプロパティになり、行内の項目はプロパティ値になります。
Import-Csv
は、Export-Csv
コマンドレットによって生成されたファイルを含め、任意の CSV ファイルで動作します。
Import-Csv
コマンドレットのパラメーターを使用して、列ヘッダー行と項目区切り記号を指定するか、または現在のカルチャのリスト区切り記号を項目区切り記号として使用するように直接 Import-Csv
できます。
ConvertTo-Csv
コマンドレットと ConvertFrom-Csv
コマンドレットを使用して、オブジェクトを CSV 文字列に変換 (および戻す) こともできます。 これらのコマンドレットは、Export-CSV
および Import-Csv
コマンドレットと同じですが、ファイルではなくパイプラインのデータを操作する点が異なります。
CSV ファイル内のヘッダー行エントリに空または null 値が含まれている場合、PowerShell は既定のヘッダー行名を挿入し、警告メッセージを表示します。
Import-Csv
では、バイトオーダー マーク (BOM) を使用してファイルのエンコード形式を検出します。 ファイルに BOM がない場合は、エンコードが UTF8 であると見なされます。
例
例 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: 区切り記号を指定する
この例では、Import-Csv
コマンドレットの Delimiter パラメーターを使用する方法を示します。
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
変数に保存されます。 変数 $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
コマンドレットは、TextInfo と ListSeparator 入れ子になったプロパティを使用して、現在のカルチャの既定のリスト区切り記号を取得します。
Get-Process
コマンドレットは、プロセス オブジェクトをパイプラインから Export-Csv
に送信します。
Export-Csv
コマンドレットは、プロセス オブジェクトを CSV 文字列に変換し、Processes.csv ファイルに文字列を保存します。
UseCulture パラメーターは、現在のカルチャの既定のリスト区切り記号を使用します。
Import-Csv
コマンドレットは、Processes.csv ファイルから CSV 文字列をインポートします。
例 4: インポートしたオブジェクトのプロパティ名を変更する
この例では、Import-Csv
の Header パラメーターを使用して、結果としてインポートされたオブジェクトのプロパティの名前を変更する方法を示します。
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、PSBeginTime、PSEndTime、および 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 パラメーターは、LinkId と TopicTitle プロパティ名を指定します。 オブジェクトは、$A
変数に格納されます。
Get-Member
コマンドレットは、Header パラメーターのプロパティ名を表示します。
Where-Object
コマンドレットは、エイリアス を含む TopicTitle プロパティを持つオブジェクト選択します。
例 6: 値がない CSV をインポートする
この例では、CSV ファイルのヘッダー行に null または空の値が含まれている場合に、PowerShell の Import-Csv
コマンドレットがどのように応答するかを示します。
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 weren't 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
Get-Content
コマンドレットは、Projects.csv
ファイルを表示します。 ProjectName と Completedの間 ヘッダー行に値がありません。
Import-Csv
コマンドレットは、Projects.csv
ファイルをインポートし、H1 が既定のヘッダー名であるため、警告メッセージを表示します。
パラメーター
-Delimiter
CSV ファイル内のプロパティ値を区切る区切り記号を指定します。 既定値はコンマ (,
) です。
コロン (:
) などの文字を入力します。 セミコロン (;
) を指定するには、単一引用符で囲みます。 tab (`t
) などのエスケープされた特殊文字を指定するには、二重引用符で囲みます。
ファイルに実際の文字列区切り記号以外の文字を指定 Import-Csv
、CSV 文字列からオブジェクトを作成して完全な CSV 文字列を返すことはできません。
型: | Char |
配置: | 1 |
規定値: | comma (,) |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Encoding
ターゲット ファイルのエンコードの種類を指定します。 既定値は Default
です。
このパラメーターに使用できる値は次のとおりです。
-
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 |
規定値: | Default |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Header
インポートされたファイルの代替列ヘッダー行を指定します。 列ヘッダーは、Import-Csv
によって作成されたオブジェクトのプロパティ名を決定します。
列ヘッダーを文字区切りリストとして入力します。 ヘッダー文字列を引用符で囲まないでください。 各列ヘッダーを単一引用符で囲みます。
データ列よりも少ない列ヘッダーを入力すると、残りのデータ列は破棄されます。 データ列よりも多くの列ヘッダーを入力すると、空のデータ列で追加の列ヘッダーが作成されます。
ヘッダー パラメーターを使用する場合は、CSV ファイルから元のヘッダー行を削除します。 それ以外の場合 Import-Csv
、ヘッダー行の項目から追加のオブジェクトが作成されます。
型: | String[] |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-LiteralPath
インポートする CSV ファイルへのパスを指定します。 Pathとは異なり、LiteralPath パラメーターの値は、型指定されたとおりに使用されます。 ワイルドカードとして解釈される文字はありません。 パスにエスケープ文字が含まれている場合は、単一引用符で囲みます。 単一引用符は、エスケープ シーケンスとして文字を解釈しないように PowerShell に指示します。
型: | String[] |
Aliases: | PSPath |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-Path
インポートする CSV ファイルへのパスを指定します。
パスをパイプして Import-Csv
することもできます。
型: | String[] |
配置: | 0 |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-UseCulture
現在のカルチャのリスト区切り記号を項目区切り記号として使用します。 カルチャのリスト区切り記号を検索するには、次のコマンドを使用します: (Get-Culture).TextInfo.ListSeparator
。
型: | SwitchParameter |
配置: | Named |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
入力
このコマンドレットへのパスを含む文字列をパイプ処理できます。
出力
このコマンドレットは、CSV ファイル内のコンテンツによって記述されたオブジェクトを返します。
メモ
Windows PowerShell には、Import-Csv
の次のエイリアスが含まれています。
ipcsv
インポートされたオブジェクトはオブジェクト型の CSV バージョンであるため、オブジェクト型の CSV 以外のバージョンを書式設定する PowerShell 型の書式設定エントリでは認識されず、書式設定されません。
Import-Csv
コマンドの結果は、テーブルのようなカスタム オブジェクトを形成する文字列のコレクションです。 各行は個別の文字列であるため、オブジェクトの Count プロパティを使用してテーブル行をカウントできます。 列はオブジェクトのプロパティであり、行内の項目はプロパティ値です。
列ヘッダー行は、列の数と列名を決定します。 列名は、オブジェクトのプロパティの名前でもあります。 最初の行は、Header パラメーターを使用して列ヘッダーを指定しない限り、列ヘッダーと解釈されます。 ヘッダー行より多くの値を持つ行がある場合、追加の値は無視されます。
列ヘッダー行に値がない場合、または null または空の値が含まれている場合、Import-Csv
は、H を使用し、その後に列ヘッダーとプロパティ名がない数値を使用します。
CSV ファイルでは、各オブジェクトは、オブジェクトのプロパティ値の文字区切りのリストで表されます。 プロパティ値は、オブジェクトの ToString() メソッドを使用して文字列に変換されるため、プロパティ値の名前で表されます。
Export-Csv
では、オブジェクトのメソッドはエクスポートされません。
関連リンク
PowerShell