將以逗號分隔值 (CSV) 檔案中的物件屬性轉換成原始物件的 CSV 版本。

語法

Import-CSV [[-Delimiter] <char>] [-Path] <string[]> [-Header <string[]>] [<CommonParameters>]

Import-CSV -UseCulture [-Path] <string[]> [-Header <string[]>] [<CommonParameters>]

描述

Import-CSV Cmdlet 會從 Export-CSV Cmdlet 所產生之變動長度的 CSV 檔案建立物件。

您可以使用 Import-CSV Cmdlet 的參數指定欄標頭列 (用來決定產生之物件的屬性名稱)、指定項目分隔符號,或是指示 Import-CSV 將目前文化特性的清單分隔符號當成項目分隔符號。

Import-CSV 建立的物件是原始物件的 CSV 版本,而 CSV 物件的屬性值是原始物件的屬性值的字串版本。物件的 CSV 版本沒有任何方法。

您也可以使用 ConvertTo-CSV 和 ConvertFrom-CSV Cmdlet,將物件轉換成 CSV 字串 (反之亦然)。除了不將 CSV 字串儲存到檔案中以外,這兩個 Cmdlet 與 Export-CSV 和 Import-CSV Cmdlet 都相同。

參數

-Delimiter <char>

指定用來在 CSV 檔案中分隔屬性值的分隔符號。預設為逗號 (,)。請輸入字元,例如分號 (:)。若要指定分號 (;),請將其置於引號內。

如果您指定的字元不是檔案中所使用的實際字串分隔符號,Import-CSV 便無法從 CSV 字串建立物件,而是會傳回字串。

必要?

false

位置?

2

預設值

,

接受管線輸入?

false

接受萬用字元?

false

-Header <string[]>

為匯入的檔案指定其他的欄標頭列。欄標頭決定 Import-CSV 所建立之物件的屬性名稱。

請輸入逗號分隔欄標頭的清單,並以引號 (單引號或雙引號) 括住每一個項目,但不要以引號括住標頭字串。如果您輸入比實際欄數量還要少的欄標頭,剩餘的欄會沒有標頭。如果輸入比實際欄數量還要多的欄標頭,則會忽略多餘的欄標頭。

使用 Header 參數時,請從 CSV 檔案刪除原始的標頭列,否則 Import-CSV 會從標頭列的項目建立多餘的物件。

必要?

false

位置?

named

預設值

接受管線輸入?

false

接受萬用字元?

false

-Path <string[]>

指定要匯入的 CSV 檔案所在路徑。您也可經由管道將路徑輸出至 Import-CSV。

必要?

true

位置?

1

預設值

接受管線輸入?

true (ByValue, ByPropertyName)

接受萬用字元?

false

-UseCulture

使用目前文化特性的清單分隔符號做為項目分隔符號。預設為逗號 (,)。

若要尋找文化特性的清單分隔符號,請使用下列命令:(Get-Culture).TextInfo.ListSeparator。如果您指定的字元不是 CSV 字串中所使用的分隔字元,ConvertFrom-CSV 會無法從 CSV 字串建立物件,而是會傳回字串。

必要?

true

位置?

named

預設值

Comma

接受管線輸入?

false

接受萬用字元?

false

<CommonParameters>

這個 Cmdlet 支援一般參數:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。如需詳細資訊,請參閱 about_Commonparameters.

輸入和輸出

輸入型別是可經由管道輸出至 Cmdlet 的物件型別。傳回型別則是 Cmdlet 所傳回的物件型別。

輸入

System.String

您可經由管道將包含路徑的字串輸出至 Import-CSV。

輸出

Object。

Import-CSV 會傳回 CSV 檔案中內容所描述的物件。

附註

因為匯入的物件是物件型別的 CSV 版本,Windows PowerShell 型別格式化項目 (用來格式化物件型別的非 CSV 版本) 無法識別和格式化這些物件。

在 CSV 檔案中,每個物件都會由逗號分隔物件屬性值的清單來代表。屬性值會轉換成字串 (利用物件的 ToString() 方法),所以一般由屬性值的名稱來代表。Export-CSV 並不會匯出物件的方法。

範例 1

C:\PS>get-process | export-csv processes.csv

C:\PS> $p = import-CSV processes.csv

C:\PS> $p | get-member

   TypeName: CSV:System.Diagnostics.Process

Name                       MemberType   Definition
----                       ----------   ----------
Equals                     Method       System.Boolean Equals(Object obj)
GetHashCode                Method       System.Int32 GetHashCode()
GetType                    Method       System.Type GetType()
ToString                   Method       System.String ToString()
BasePriority               NoteProperty System.String BasePriority=8
Company                    NoteProperty System.String Company=Microsoft Corporation
...

C:\PS> $p | out-gridview

描述
-----------
這個範例示範如何將 Microsoft .NET Framework 物件的 CSV 檔案匯出後再匯入。

第一個命令會使用 Get-Process Cmdlet 取得本機電腦上的處理序,並使用管線運算子 (|) 將處理序物件傳送給 Export-CSV Cmdlet,讓後者將處理序物件匯出到目前目錄中的 Processes.csv 檔案。

第二個命令會使用 Import-CSV Cmdlet 匯入 Import-CSV 檔案中的處理序,然後將產生的處理序物件儲存到 $p 變數。

第三個命令會使用管線運算子將匯入的物件傳送給 Get-Member Cmdlet。結果會顯示這些物件是 CSV:System.Diagnostic.Process 物件,而不是 Get-Process 傳回的 System.Diagnostic.Process 物件。

再者,因為在處理序物件的 CSV 版本的格式化檔案中沒有項目型別,因此不會像格式化標準處理序物件一樣格式化這些物件。

若要顯示物件,請使用格式化 Cmdlet (如 Format-Table 和 Format-List),或經由管道將物件輸出至 Out-GridView。






範例 2

C:\PS>get-process | export-csv processes.csv -Delimiter :

C:\PS> $p = import-csv processes.csv -Delimiter :

描述
-----------
這個範例示範如何使用 Import-CSV 的 Delimiter 參數。在這個範例中,處理序會匯出到以冒號 (:) 當做分隔符號的檔案中。

在匯入時,Import-CSV 檔案會使用 Delimiter 參數來代表檔案中所使用的分隔符號。






範例 3

C:\PS>$p = import-csv processes.csv -UseCulture

C:\PS> (get-culture).textinfo.listseparator

,

描述
-----------
這個範例示範如何使用 Import-CSV 的 UseCulture 參數。

第一個命令會將 Processes.csv 檔案中的物件匯入 $p 變數,並以 UseCulture 參數來指示 Import-CSV 使用為目前文化特性定義的清單分隔符號。

第二個命令會顯示目前文化特性的清單分隔符號。此命令會使用 Get-Culture Cmdlet 取得目前的文化特性,以及使用點 (.) 方法取得目前文化特性的 TextInfo 屬性和 TextInfo 中物件的 ListSeparator 屬性。在這個範例中,此命令會傳回逗號。






範例 4

C:\PS>start-job -scriptblock { get-process } | export-csv jobs.csv

C:\PS> $header = "MoreData","StatusMessage","Location","Command","State","Finished","InstanceId","SessionId","Name","ChildJobs","Output","Error","Progress","Verbose","Debug","Warning","StateChanged"

# Delete header from file
C:\PS> $a = (get-content jobs.csv)
C:\PS> $a = $a[0], $a[2..($a.count - 1)]
C:\PS> $a > jobs.csv

C:\PS> $j = import-csv jobs.csv -header $header

C:\PS> $j

MoreData      : True
StatusMessage :
Location      : localhost
Command       : get-process
State         : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : 135bdd25-40d6-4a20-bd68-05282a59abd6
SessionId     : 1
Name          : Job1
ChildJobs     : System.Collections.Generic.List`1[System.Management.Automation.Job]
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.String]
Debug         : System.Management.Automation.PSDataCollection`1[System.String]
Warning       : System.Management.Automation.PSDataCollection`1[System.String]
StateChanged  :

描述
-----------
這個範例示範如何使用 Import-CSV 的 Header 參數變更產生之匯入物件內的屬性名稱。

第一個命令會使用 Start-Job Cmdlet 啟動一個在本機電腦上執行 Get-Process 命令的背景工作。管線運算子 (|) 會將產生的工作物件傳送給 Export-CSV Cmdlet,讓後者將工作物件轉換成 CSV 格式。指派運算子 (=) 會將產生的 CSV 儲存到 Jobs.csv 檔案。

第二個命令會將標頭儲存到 $header 變數。此標頭與預設標頭不同之處在於它以 "MoreData" 來代替 "HasMoreData",而且以 "State" 來代替 "JobStateInfo"。

接下來的三個命令會從 Jobs.csv 檔案刪除原始標頭 (第二行)。

第六個命令會使用 Import-CSV Cmdlet 匯入 Jobs.csv 檔案,並將 CSV 字串轉換成工作物件的 CSV 版本。這個命令會使用 Header 參數送出其他的標頭。結果會儲存到 $j 變數。

第七個命令會顯示 $j 變數中的物件。產生的物件有 "MoreData" 和 "State" 屬性,如命令輸出所示。






範例 5

C:\PS>".\processes.csv" | import-csv

描述
-----------
這個命令會從 Processes.csv 檔案匯入物件。






請參閱




目錄