将逗号分隔值 (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 命令来验证列表分隔符。






另请参阅




目录