ConvertFrom-Csv

將字元分隔值 (CSV) 格式的物件屬性轉換成原始物件的 CSV 版本。

Syntax

ConvertFrom-Csv
                [[-Delimiter] <Char>]
                [-InputObject] <PSObject[]>
                [-Header <String[]>]
                [<CommonParameters>]
ConvertFrom-Csv
                -UseCulture
                [-InputObject] <PSObject[]>
                [-Header <String[]>]
                [<CommonParameters>]

Description

Cmdlet 會將 ConvertFrom-Csv 字元分隔值 (CSV) 資料轉換成 每個 CSV 資料行的 PSObject 類型物件。 新的物件會以從 CSV 資料讀取的順序寫入管線。 CSV 數據行標頭數據列中的值會成為新增至每個新 PSObject 的屬性名稱。

建立的物件 ConvertFrom-CsvCSV 檔案中每個數據列的 PSObject 類型物件。 CSV 物件的屬性值是原始物件的屬性值字串版本。 物件的 CSV 版本沒有任何方法。

您也可以使用 Export-CsvImport-Csv Cmdlet,將物件轉換成檔案和返回中的 CSV 字串。 這些 Cmdlet 與 ConvertTo-CsvConvertFrom-Csv Cmdlet 相同,不同之處在於它們會將 CSV 字串儲存在檔案中。

PSObject 類型會以數據行標頭順序維護屬性的順序。 這表示當您將物件轉換成 CSV 格式時,會取得相同的數據行順序。

範例

範例 1:將本機電腦上的進程轉換為 CSV 格式

此範例示範如何將本機計算機上的進程轉換成 CSV 格式,然後將其還原為物件表單。

$P = Get-Process | ConvertTo-Csv
$P | ConvertFrom-Csv

Cmdlet 會將 Get-Process 行程向下傳送至 ConvertTo-Csv。 Cmdlet 會將 ConvertTo-Csv 進程對象轉換成一系列 CSV 字串。 Cmdlet 會將 ConvertFrom-Csv CSV 字串轉換成原始進程物件的 CSV 版本。 CSV 字串會儲存在變數中 $P

範例 2:將資料物件轉換成 CSV 格式,然後轉換成 CSV 物件格式

此範例示範如何將數據物件轉換成 CSV 格式,然後轉換成 CSV 物件格式。

$Date = Get-Date | ConvertTo-Csv -Delimiter ';'
ConvertFrom-Csv -InputObject $Date -Delimiter ';'

第一個命令會使用 Get-Date 將管線的目前日期和時間向下傳送至 ConvertTo-Csv。 Cmdlet 會將 ConvertTo-Csv 日期對象轉換成一系列 CSV 字串。 Delimiter 參數是用來指定分號分隔符。 字串會儲存在變數中 $Date

範例 3:使用標頭參數來變更屬性的名稱

這個範例示範如何使用ConvertFrom-Csv Header 參數來變更所產生匯入物件中的屬性名稱。

$J = Start-Job -ScriptBlock { Get-Process } | ConvertTo-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 $J
$J = $J[1..($J.count - 1)]
$J | ConvertFrom-Csv -Header $Header

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]

Cmdlet 會 Start-Job 啟動執行 Get-Process的背景作業。 作業物件會向下傳送至管線, ConvertTo-Csv 並轉換成 CSV 字串。 NoTypeInformation 參數會從 CSV 輸出中移除類型資訊標頭,並在 PowerShell v6 和更新版本中是選擇性的。 $Header變數包含取代下列預設值的自定義標頭:HasMoreData、JobStateInfoPSBeginTime、PSEndTimePSJobTypeName$J變數包含 CSV 字串,可用來移除預設標頭。 Cmdlet 會將 ConvertFrom-Csv CSV 字串 轉換成 PSCustomObject ,並使用 Header 參數來套用 $Header 變數。

範例 4:轉換服務物件的 CSV 字串

此範例示範如何使用 ConvertFrom-Csv Cmdlet 搭配 UseCulture 參數。

(Get-Culture).TextInfo.ListSeparator
$Services = (Get-Service | ConvertTo-Csv)
ConvertFrom-Csv -InputObject $Services -UseCulture

Cmdlet Get-Culture 會使用巢狀屬性 TextInfoListSeparator 來取得目前文化特性的預設清單分隔符。 Cmdlet 會將 Get-Service 服務物件向下傳送至 ConvertTo-Csv。 會將 ConvertTo-Csv 服務對象轉換成一系列 CSV 字串。 CSV 字串會儲存在變數中 $Services 。 Cmdlet ConvertFrom-Csv 會使用 InputObject 參數,並從變數轉換 CSV 字串 $ServicesUseCulture 參數會使用目前文化特性的預設清單分隔符。

使用UseCulture參數時,請確定目前文化特性的預設清單分隔符符合 CSV 字串中使用的分隔符。 否則, ConvertFrom-Csv 無法從 CSV 字串產生物件。

參數

-Delimiter

指定分隔符,分隔 CSV 字串中的屬性值。 預設值為逗號 (,)。 輸入字元,例如冒號 (:)。 若要指定分號 (;) 以單引弧括住它。

如果您指定檔案中實際字串分隔符以外的字元, ConvertFrom-Csv 則無法從 CSV 字串建立物件,並傳回 CSV 字串。

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

-Header

指定匯入字串的替代資料行行首數據列。 數據行標頭會決定 所 ConvertFrom-Csv建立之 對象的屬性名稱。

輸入數據行標頭做為字元分隔清單。 請勿以引號括住標頭字串。 以單引弧括住每個數據行標頭。

如果您輸入的數據行標頭比有數據行少,則會捨棄其餘的數據行。 如果您輸入的數據行標頭數目超過數據行,則會使用空白數據行來建立其他數據行標頭。

使用 Header 參數時,請省略 CSV 字串中的數據行標頭字串。 否則,此 Cmdlet 會從標頭數據列中的專案建立額外的物件。

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

-InputObject

指定要轉換成物件的 CSV 字串。 輸入包含 CSV 字串的變數,或輸入取得 CSV 字串的命令或表達式。 您也可以使用管線將 CSV 字串傳送至 ConvertFrom-Csv

Type:PSObject[]
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

您可以使用管線將 CSV 字串傳送至此 Cmdlet。

輸出

PSObject

此 Cmdlet 會傳回 CSV 字串中屬性所描述的物件。

備註

在 CSV 格式中,每個物件都會以物件屬性值的字元分隔清單來表示。 屬性值會使用 ToString() 物件的 方法轉換成字串。 無法匯出物件的方法。