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
は、コマンドレットによって生成されたファイルを含むすべての CSV ファイルで Export-Csv
機能します。
コマンドレットの Import-Csv
パラメーターを使用して列ヘッダー行と項目区切り記号を指定したり Import-Csv
、現在のカルチャのリスト区切り記号を項目区切り記号として直接使用したりできます。
また、and ConvertFrom-Csv
コマンドレットをConvertTo-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: 区切り記号を指定する
この例では、コマンドレットの 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
、入れ子になったプロパティ TextInfo と ListSeparator を使用して、現在のカルチャの既定のリスト区切り記号を取得します。 このコマンドレットは 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、PSBeginTime、P 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 パラメーターは、LinkId と TopicTitle というプロパティ名を指定します。 オブジェクトは変数に $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 ファイルを表示します。 ヘッダー行に ProjectName と Completed の間に値がありません。 H1 はImport-Csv
既定のヘッダー名であるため、コマンドレットはProjects.csv ファイルをインポートし、警告メッセージを表示します。 このコマンドは (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
ターゲット ファイルのエンコードの種類を指定します。 既定値は Default
です。
このパラメーターに使用できる値は次のとおりです。
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: | Default |
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 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Path
インポートする CSV ファイルのパスを指定します。
パス Import-Csv
をパイプすることもできます。
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | False |
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 |
入力
このコマンドレットへのパスを含む文字列をパイプ処理できます。
出力
このコマンドレットは、CSV ファイル内のコンテンツによって記述されたオブジェクトを返します。
メモ
Windows PowerShell には、次のエイリアスが Import-Csv
含まれています。
ipcsv
インポートされたオブジェクトはオブジェクト型の CSV バージョンであるため、オブジェクト型の CSV 以外のバージョンを書式設定する PowerShell 型の書式設定エントリでは認識および書式設定されません。
コマンドの Import-Csv
結果は、テーブルのようなカスタム オブジェクトを形成する文字列のコレクションです。 各行は個別の文字列であるため、オブジェクトの Count プロパティを使用してテーブル行をカウントできます。 列はオブジェクトのプロパティであり、行内の項目はプロパティの値です。
列ヘッダー行により、列の数と列名が決定されます。 列名は、オブジェクトのプロパティの名前でもあります。 Header パラメーターを使用して列ヘッダーを指定しない限り、最初の行は列ヘッダーと解釈されます。 いずれかの行にヘッダー行よりも多くの値が含まれる場合、追加の値は無視されます。
列ヘッダー行に値がないか、null または空の値が含まれている場合は、H を使用し、Import-Csv
その後に不足している列ヘッダーとプロパティ名の番号を使用します。
CSV ファイルでは、各オブジェクトは、オブジェクトのプロパティ値の文字区切りのリストで表されます。 プロパティ値は、オブジェクトの ToString() メソッドを使用して文字列に変換されるため、プロパティ値の名前で表されます。 Export-Csv
では、オブジェクトのメソッドはエクスポートされません。
関連リンク
PowerShell