将逗号分隔值 (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 一样,只是它们是将 CSV 字符串保存在文件中。
参数
-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 |
默认值 |
Comma |
是否接受管道输入? |
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 来获取当前日期和时间。管道对象 (|) 将日期发送至可将数据对象转换为一系列 CSV 字符串的 ConvertTo-CSV cmdlet。该命令使用 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”和“State”,而不是“HasMoreData”和“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 将服务对象的 CSV 字符串进行转换,该字符串已由 ConvertTo-CSV cmdlet 转换过。该命令使用 UseCulture 参数来指示 ConvertFrom-CSV 使用当前区域性的分隔符(列表分隔符)。 在使用 UseCulture 参数时,请确保当前区域性的列表分隔符与 CSV 字符串中使用的分隔符相匹配。否则,ConvertFrom-CSV 无法基于 CSV 字符串生成对象。 此示例中,在使用 ConvertFrom-CSV 命令之前,使用 Get-Culture 命令来验证列表分隔符。
另请参阅