ConvertFrom-CSV
以逗號分隔值 (CSV) 格式將物件屬性轉換成原始物件的 CSV 版本。
語法
ConvertFrom-CSV [[-Delimiter] <char>] [-InputObject] <PSObject[]> [-Header <string[]>] [<CommonParameters>]
ConvertFrom-CSV -UseCulture [-InputObject] <PSObject[]> [-Header <string[]>] [<CommonParameters>]
描述
ConvertFrom-CSV Cmdlet 會從 ConvertTo-CSV Cmdlet 所產生之 CSV 格式的變動長度字串建立物件。
您可以使用 ConvertFrom-CSV Cmdlet 的參數指定欄標頭列 (用來決定產生的物件的屬性名稱)、指定項目分隔符號,或是指示 ConvertFrom-CSV 將目前文化特性的清單分隔符號當成分隔符號。
ConvertFrom-CSV 建立的物件是原始物件的 CSV 版本,而 CSV 物件的屬性值是原始物件的屬性值的字串版本。物件的 CSV 版本沒有任何方法。
您也可以使用 Export-CSV 和 Import-CSV Cmdlet,將物件轉換成檔案中的 CSV 字串 (反之亦然)。除了將 CSV 字串儲存到檔案中以外,這兩個 Cmdlet 與 ConvertTo-CSV 和 ConvertFrom-CSV Cmdlet 都相同。
參數
-Delimiter <char>
指定用來在 CSV 字串中分隔屬性值的分隔符號。預設為逗號 (,)。請輸入字元,例如分號 (:)。若要指定分號 (;),請將其置於引號內。
如果您指定的字元不是 CSV 字串中所使用的分隔字元,ConvertFrom-CSV 會無法從 CSV 字串建立物件,而是會傳回字串。
必要? |
false |
位置? |
2 |
預設值 |
',' |
接受管線輸入? |
false |
接受萬用字元? |
false |
-Header <string[]>
為匯入的字串指定其他的欄標頭列。欄標頭決定 ConvertFrom-CSV 所建立之物件的屬性名稱。
請輸入逗號分隔欄標頭的清單,並以引號 (單引號或雙引號) 括住每一個項目,但不要以引號括住標頭字串。如果您輸入比實際欄數量還要少的欄標頭,剩餘的欄會沒有標頭。如果輸入比實際欄數量還要多的欄標頭,則會忽略多餘的欄標頭。
使用 Header 參數時,請省略 CSV 字串的欄標頭,否則 ConvertFrom-CSV 會從標頭列的項目建立多餘的物件。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-InputObject <PSObject[]>
指定要轉換成物件的 CSV 字串。請輸入包含 CSV 字串的變數,或輸入可取得 CSV 字串的命令或運算式。您也可經由管道將 CSV 字串輸出至 ConvertFrom-CSV。
必要? |
true |
位置? |
1 |
預設值 |
|
接受管線輸入? |
true (ByValue, ByPropertyName) |
接受萬用字元? |
false |
-UseCulture
使用目前文化特性的清單分隔符號做為字串分隔符號。預設為逗號 (,)。
若要尋找文化特性的清單分隔符號,請使用下列命令:(Get-Culture).TextInfo.ListSeparator。如果您指定的字元不是 CSV 字串中所使用的分隔字元,ConvertFrom-CSV 會無法從 CSV 字串建立物件,而是會傳回字串。
必要? |
true |
位置? |
named |
預設值 |
逗號 |
接受管線輸入? |
false |
接受萬用字元? |
false |
<CommonParameters>
這個 Cmdlet 支援一般參數:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。如需詳細資訊,請參閱 about_Commonparameters.
輸入和輸出
輸入型別是可經由管道輸出至 Cmdlet 的物件型別。傳回型別則是 Cmdlet 所傳回的物件型別。
輸入 |
System.String 您可經由管道將 CSV 字串輸出至 ConvertFrom-CSV。 |
輸出 |
System.Management.Automation.PSObject ConvertFrom-CSV 會傳回 CSV 字串中屬性所描述的物件。 |
附註
因為匯入的物件是物件型別的 CSV 版本,Windows PowerShell 型別格式化項目 (用來格式化物件型別的非 CSV 版本) 無法識別和格式化這些物件。
使用 CSV 格式,每個物件都會由逗號分隔物件屬性值的清單來代表。屬性值會轉換成字串 (利用物件的 ToString() 方法),所以一般由屬性值的名稱來代表。ConvertTo-Csv 並不會匯出物件的方法。
範例 1
C:\PS>$p = get-process | convertto-csv
C:\PS> $p | convertfrom-csv
描述
-----------
這些命令會將本機電腦上的處理序轉換成 CSV 格式,然後將其還原成物件格式。
第一個命令會使用 Get-Process Cmdlet 取得本機電腦上的處理序。管線運算子 (|) 會將這些處理序傳送給 ConvertTo-CSV Cmdlet,此 Cmdlet 會將處理序物件轉換成 CSV 格式。CSV 字串會儲存在 $p 變數中。
第二個命令會使用管線運算子將 $p 變數中的 CSV 字串傳送給 ConvertFrom-CSV Cmdlet。此 Cmdlet 會將 CSV 字串轉換成原始處理序物件的 CSV 版本。
範例 2
C:\PS>$date = get-date | convertto-csv -delimiter ";"
C:\PS> convertfrom-csv -inputobject $date -delimiter ";"
描述
-----------
這些命令會將資料物件轉換成 CSV 格式,再轉換成 CSV 物件格式。
第一個命令會使用 Get-Date Cmdlet 取得目前的日期和時間。管線物件 (|) 會將日期傳送給 ConvertTo-CSV Cmdlet,讓後者將日期物件轉換成一連串的 CSV 字串。此命令會使用 Delimiter 參數指定分號分隔符號。字串會儲存在 $date 變數中。
第二個命令會使用 ConvertFrom-CSV Cmdlet 將 $date 變數中的 CSV 字串轉換回物件格式。此命令會使用 InputObject 參數指定 CSV 字串,以及使用 Delimiter 參數指定分號分隔字元。
範例 3
C:\PS>$j = start-job -scriptblock { get-process } | convertto-csv
C:\PS> $header = "MoreData","StatusMessage","Location","Command","State","Finished","InstanceId","SessionId","Name","ChildJobs","Output","Error","Progress","Verbose","Debug","Warning","StateChanged"
# Delete header from $j
C:\PS> $j = $j[0], $j[2..($j.count - 1)]
$j | convertfrom-csv -header $header
MoreData : True
StatusMessage :
Location : localhost
Command : get-process
State : Running
Finished : System.Threading.ManualResetEvent
InstanceId : 6fcb6578-7f42-4d93-9f23-9937f6aac1a2
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 :
描述
-----------
這個範例示範如何使用 ConvertFrom-Csv 的 Header 參數變更產生之匯入物件內的屬性名稱。
第一個命令會使用 Start-Job Cmdlet 啟動一個在本機電腦上執行 Get-Process 命令的背景工作。管線運算子 (|) 會將產生的工作物件傳送給 ConvertTo-CSV Cmdlet,此 Cmdlet 會將工作物件轉換成 CSV 格式。指派運算子 (=) 會將產生的 CSV 儲存到 $j 變數。
第二個命令會將標頭儲存到 $header 變數。此標頭與預設標頭不同之處在於它以 "MoreData" 來代替 "HasMoreData",而且以 "State" 來代替 "JobStateInfo"。
第三個字串會從 CSV 字串刪除原始標頭 (第二行),並將它傳回給 $j 變數。
第四個命令會使用 ConvertFrom-CSV Cmdlet 將 CSV 字串轉換成工作物件的 CSV 版本,並使用管線運算子將 $j 中的內容傳送給 ConvertFrom-CSV。依照標頭所指定,產生的物件有 "MoreData" 和 "State" 屬性。
範例 4
C:\PS>(get-culture).textinfo.listseparator
C:\PS> ConvertFrom-Csv -inputobject $services -UseCulture
描述
-----------
這個命令會使用 ConvertFrom-CSV Cmdlet 轉換 ConvertTo-CSV 已轉換過的服務物件的 CSV 字串,並使用 UseCulture 參數指示 ConvertFrom-CSV 使用目前文化特性的分隔符號 (清單分隔符號)。
使用 UseCulture 參數時,請確定目前文化特性的清單分隔符號與 CSV 字串中使用的分隔符號相符,否則 ConvertFrom-CSV 無法從 CSV 字串產生物件。
在這個範例中,先使用 Get-Culture 命令確認清單分隔符號,然後才使用 ConvertFrom-CSV 命令。