ConvertTo-Csv

将 .NET 对象转换为一系列字符分隔值 (CSV) 字符串。

语法

ConvertTo-Csv
              [-InputObject] <psobject>
              [[-Delimiter] <char>]
              [-NoTypeInformation]
              [<CommonParameters>]
ConvertTo-Csv
              [-InputObject] <psobject>
              [-UseCulture]
              [-NoTypeInformation]
              [<CommonParameters>]

说明

ConvertTo-CSV cmdlet 返回一系列表示提交的对象的字符分隔值 (CSV) 字符串。 然后可以使用 ConvertFrom-Csv cmdlet 从 CSV 字符串重新创建对象。 从 CSV 转换而来的对象是原始对象的字符串值,其中包含属性值,没有方法。

可以使用 Export-Csv cmdlet 将对象转换为 CSV 字符串。 Export-CSVConvertTo-CSV 类似,只不过它将 CSV 字符串保存到文件。

ConvertTo-CSV cmdlet 具有参数来指定逗号以外的分隔符,或使用当前区域作为分隔符。

示例

示例 1:将对象转换为 CSV

此示例将 Process 对象转换为 CSV 字符串

Get-Process -Name 'PowerShell' | ConvertTo-Csv -NoTypeInformation

"Name","SI","Handles","VM","WS","PM","NPM","Path","Company","CPU","FileVersion", ...
"powershell","11","691","2204036739072","175943680","132665344","33312", ...

Get-Process cmdlet 获取 Process 对象,并使用 Name 参数指定 PowerShell 进程。 进程对象沿管道向下发送到 ConvertTo-CSV cmdlet。 ConvertTo-CSV cmdlet 将对象转换为 CSV 字符串。 NoTypeInformation 参数从 CSV 输出中移除 #TYPE 信息标头

示例 2:将 DateTime 对象转换为 CSV

此示例将 DateTime 对象转换为 CSV 字符串

$Date = Get-Date
ConvertTo-Csv -InputObject $Date -Delimiter ';' -NoTypeInformation

"DisplayHint";"DateTime";"Date";"Day";"DayOfWeek";"DayOfYear";"Hour";"Kind";"Millisecond";"Minute";"Month";"Second";"Ticks";"TimeOfDay";"Year"
"DateTime";"Friday, January 4, 2019 14:40:51";"1/4/2019 00:00:00";"4";"Friday";"4";"14";"Local";"711";"40";"1";"51";"636822096517114991";"14:40:51.7114991";"2019"

Get-Date cmdlet 获取 DateTime 对象,并将其保存在 $Date 变量中。 ConvertTo-Csv cmdlet 将 DateTime 对象转换为字符串。 InputObject 参数使用存储在 $Date 变量中的 DateTime 对象。 Delimiter 参数指定分隔字符串值的分号。 NoTypeInformation 参数从 CSV 输出中移除 #TYPE 信息标头

示例 3:将 PowerShell 事件日志转换为 CSV

此示例将 PowerShell 的 Windows 事件日志转换为一系列 CSV 字符串。

(Get-Culture).TextInfo.ListSeparator
Get-WinEvent -LogName 'Windows PowerShell' | ConvertTo-Csv -UseCulture -NoTypeInformation

,
"Message","Id","Version","Qualifiers","Level","Task","Opcode","Keywords","RecordId", ...
"Error Message = System error","403",,"0","4","4",,"36028797018963968","46891","PowerShell", ...

Get-Culture cmdlet 使用 TextInfo 嵌套属性和 ListSeparator,并显示当前区域性的默认列表分隔符。 Get-WinEvent cmdlet 获取事件日志对象,并使用 LogName 参数指定日志文件名称。 事件日志对象沿管道向下发送到 ConvertTo-Csv cmdlet。 ConvertTo-Csv cmdlet 将事件日志对象转换为一系列 CSV 字符串。 UseCulture 参数使用当前区域性的默认列表分隔符作为分隔符。 NoTypeInformation 参数从 CSV 输出中移除 #TYPE 信息标头

参数

-Delimiter

指定用于分隔 CSV 字符串中属性值的分隔符。 默认值为逗号 (,)。 输入字符,如冒号 (:)。 若要指定分号 (;),请将它括在单引号中。

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

-InputObject

指定要转换为 CSV 字符串的对象。 输入一个包含对象的变量,或键入可获取对象的命令或表达式。 还可以通过管道将对象传递给 ConvertTo-CSV

Type:PSObject
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-NoTypeInformation

移除输出中的 #TYPE 信息标头。 此参数在 PowerShell 6.0 中成为默认值,包含该参数是为了实现后向兼容性。

Type:SwitchParameter
Aliases:NTI
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UseCulture

将当前区域性的列表分隔符用作项分隔符。 若要查找区域性的列表分隔符,请使用以下命令:(Get-Culture).TextInfo.ListSeparator

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

输入

PSObject

可以通过管道将具有扩展类型系统 (ETS) 适配器的任何对象传递给此 cmdlet。

输出

String

此 cmdlet 返回一个或多个表示每个已转换对象的字符串。

备注

采用 CSV 格式时,通过以字符分隔的对象属性值列表来表示每个对象。 属性值使用对象的 ToString() 方法转换为字符串。 字符串由属性值名称表示。 ConvertTo-CSV 不导出对象的方法。

CSV 字符串输出如下:

  • 默认情况下,第一个字符串包含 #TYPE 信息标头,后跟对象类型的完全限定名称。 例如,#TYPE System.Diagnostics.Process
  • 如果使用 NoTypeInformation,则第一个字符串包含列标头。 标头包含第一个对象的属性名称作为逗号分隔的列表。
  • 其余字符串包含每个对象属性值的逗号分隔列表。

将多个对象提交到 ConvertTo-CSV 时,ConvertTo-CSV 根据提交的第一个对象的属性对字符串排序。 如果剩余的对象没有指定的属性之一,则该对象的属性值为 Null,由两个连续的逗号表示。 如果剩余的对象具有其他属性,则忽略这些属性值。