ConvertTo-Csv
将 .NET 对象转换为一系列字符分隔值, (CSV) 字符串。
语法
ConvertTo-Csv
[-InputObject] <PSObject>
[[-Delimiter] <Char>]
[-IncludeTypeInformation]
[-NoTypeInformation]
[-QuoteFields <String[]>]
[-UseQuotes <QuoteKind>]
[<CommonParameters>]
ConvertTo-Csv
[-InputObject] <PSObject>
[-UseCulture]
[-IncludeTypeInformation]
[-NoTypeInformation]
[-QuoteFields <String[]>]
[-UseQuotes <QuoteKind>]
[<CommonParameters>]
说明
cmdlet ConvertTo-CSV
(CSV) 字符串返回一系列字符分隔值,这些字符串表示提交的对象。 然后, ConvertFrom-Csv
可以使用 cmdlet 从 CSV 字符串重新创建对象。 从 CSV 转换的对象是包含属性值且不包含方法的原始对象的字符串值。
可以使用 Export-Csv
cmdlet 将对象转换为 CSV 字符串。 Export-CSV
类似于 ConvertTo-CSV
,只是将 CSV 字符串保存到文件。
cmdlet ConvertTo-CSV
具有用于指定逗号以外的分隔符的参数,或使用当前区域性作为分隔符。
示例
示例 1:将对象转换为 CSV
此示例将 Process 对象转换为 CSV 字符串。
Get-Process -Name pwsh | ConvertTo-Csv -NoTypeInformation
"Name","SI","Handles","VM","WS","PM","NPM","Path","Parent","Company","CPU","FileVersion", ...
"pwsh","8","950","2204001161216","100925440","59686912","67104", ...
cmdlet Get-Process
获取 Process 对象,并使用 Name 参数指定 PowerShell 进程。 进程对象在管道中向下发送到 ConvertTo-CSV
cmdlet。 cmdlet ConvertTo-CSV
将对象转换为 CSV 字符串。 NoTypeInformation 参数从 CSV 输出中删除 #TYPE 信息标头,在 PowerShell 6 中不是必需的。
示例 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"
cmdlet Get-Date
获取 DateTime 对象并将其保存在 变量中 $Date
。 cmdlet ConvertTo-Csv
将 DateTime 对象转换为字符串。 InputObject 参数使用存储在 变量中的 $Date
DateTime 对象。 Delimiter 参数指定用于分隔字符串值的分号。 NoTypeInformation 参数从 CSV 输出中删除 #TYPE 信息标头,在 PowerShell 6 中不是必需的。
示例 3:将 PowerShell 事件日志转换为 CSV
此示例将 PowerShell 的 Windows 事件日志转换为一系列 CSV 字符串。
(Get-Culture).TextInfo.ListSeparator
Get-WinEvent -LogName 'PowerShellCore/Operational' | ConvertTo-Csv -UseCulture -NoTypeInformation
,
"Message","Id","Version","Qualifiers","Level","Task","Opcode","Keywords","RecordId", ...
"Error Message = System error""4100","1",,"3","106","19","0","31716","PowerShellCore", ...
cmdlet Get-Culture
使用嵌套属性 TextInfo 和 ListSeparator ,并显示当前区域性的默认列表分隔符。 cmdlet Get-WinEvent
获取事件日志对象,并使用 LogName 参数指定日志文件名。 事件日志对象在管道中向下发送到 ConvertTo-Csv
cmdlet。 cmdlet ConvertTo-Csv
将事件日志对象转换为一系列 CSV 字符串。 UseCulture 参数使用当前区域性的默认列表分隔符作为分隔符。 NoTypeInformation 参数从 CSV 输出中删除 #TYPE 信息标头,在 PowerShell 6 中不是必需的。
示例 4:转换为包含两列引号的 CSV
此示例将 DateTime 对象转换为 CSV 字符串。
Get-Date | ConvertTo-Csv -QuoteFields "DateTime","Date"
DisplayHint,"DateTime","Date",Day,DayOfWeek,DayOfYear,Hour,Kind,Millisecond,Minute,Month,Second,Ticks,TimeOfDay,Year
DateTime,"Thursday, August 22, 2019 11:27:34 AM","8/22/2019 12:00:00 AM",22,Thursday,234,11,Local,569,27,8,34,637020700545699784,11:27:34.5699784,2019
示例 5:仅在需要时转换为带引号的 CSV
此示例将 DateTime 对象转换为 CSV 字符串。
Get-Date | ConvertTo-Csv -UseQuotes AsNeeded
DisplayHint,DateTime,Date,Day,DayOfWeek,DayOfYear,Hour,Kind,Millisecond,Minute,Month,Second,Ticks,TimeOfDay,Year
DateTime,"Thursday, August 22, 2019 11:31:00 AM",8/22/2019 12:00:00 AM,22,Thursday,234,11,Local,713,31,8,0,637020702607132640,11:31:00.7132640,2019
示例 6:将哈希表转换为 CSV
在 PowerShell 7.2 及更高版本中,将哈希表转换为 CSV 时,第一个哈希表的键将序列化并用作输出中的标头。
$person1 = @{
Name = 'John Smith'
Number = 1
}
$person2 = @{
Name = 'Jane Smith'
Number = 2
}
$allPeople = $person1, $person2
$allPeople | ConvertTo-Csv
"Name","Number"
"John Smith","1"
"Jane Smith","2"
示例 7:使用其他属性将哈希表转换为 CSV
在 PowerShell 7.2 及更高版本中,转换包含附加 Add-Member
属性的 Select-Object
哈希表时,还会在 CSV 输出中将附加属性添加为标头。
$allPeople | Add-Member -Name ExtraProp -Value 42
$allPeople | ConvertTo-Csv
"Name","Number","ExtraProp"
"John Smith","1","42"
"Jane Smith","2","42"
每个哈希表都有一个名为 的属性 ExtraProp
,该属性由 添加 Add-Member
,然后转换为 CSV。 现在,输出中可以看到 ExtraProp
是标头。
如果添加的属性与哈希表中的键 同 名,则键优先,并且仅将密钥转换为 CSV。
参数
-Delimiter
指定分隔符以分隔 CSV 字符串中的属性值。 默认值为逗号 (,
) 。 输入字符,例如冒号 (:
) 。 若要指定分号 (;
) 将其括在单引号中。
Type: | Char |
Position: | 1 |
Default value: | comma (,) |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-IncludeTypeInformation
使用此参数时,输出的第一行包含 #TYPE
后跟对象类型的完全限定名称。 例如 #TYPE System.Diagnostics.Process
。
此参数是在 PowerShell 6.0 中引入的。
Type: | SwitchParameter |
Aliases: | ITI |
Position: | Named |
Default value: | False |
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 |
-QuoteFields
指定应用引号括起的列的名称。 使用此参数时,仅引用指定的列。 此参数已在 PowerShell 7.0 中添加。
Type: | String[] |
Aliases: | QF |
Position: | Named |
Default value: | None |
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 |
-UseQuotes
指定何时在 CSV 文件中使用引号。 可能的值为:
- 从不 - 不引用任何内容
- 始终 - 引用所有 (默认行为)
- AsNeeded - 仅包含分隔符、双引号或换行符的引号字段
此参数已在 PowerShell 7.0 中添加。
Type: | Microsoft.PowerShell.Commands.BaseCsvWritingCommand+QuoteKind |
Aliases: | UQ |
Position: | Named |
Default value: | Always |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
输入
可以将具有扩展类型系统 (ETS) 适配器的任何对象通过管道传递到此 cmdlet。
输出
此 cmdlet 返回表示每个转换对象的一个或多个字符串。
备注
在 CSV 格式中,每个对象都由其属性值的字符分隔列表表示。 属性值使用 对象的 ToString () 方法转换为字符串。 字符串由属性值名称表示。 ConvertTo-CSV
不导出对象的 方法。
CSV 字符串输出如下:
- 如果使用 IncludeTypeInformation ,则第一个字符串由 #TYPE 后跟对象类型的完全限定名称组成。 例如, #TYPE System.Diagnostics.Process。
- 如果未使用 IncludeTypeInformation ,则第一个字符串包括列标题。 标头包含第一个对象的属性名称作为字符分隔列表。
- 其余字符串包含每个对象的属性值的字符分隔列表。
从 PowerShell 6.0 开始,的默认行为 ConvertTo-CSV
是不在 CSV 中包含 #TYPE 信息,并且隐含 NoTypeInformation 。 IncludeTypeInformation 可用于包含 #TYPE 信息,并模拟 PowerShell 6.0 之前的默认行为 ConvertTo-CSV
。
将多个对象提交到 ConvertTo-CSV
时, ConvertTo-CSV
将根据提交的第一个对象的属性对字符串进行排序。 如果其余对象没有指定属性之一,则该对象的属性值为 Null,由两个连续逗号表示。 如果剩余的对象具有其他属性,则忽略这些属性值。