如果您导出为 CSV 的对象Export-Csv
或ConvertTo-Csv
具有包含值集合(数组)的属性值,则这些值会通过它们的方法进行字符串化.ToString()
,这会导致无用的表示,就像您的数组值.IPV4Addresses
属性的情况一样。
使用 cmdlet 演示这一点ConvertTo-Csv
(其工作方式类似于Export-Csv
,但返回CSV 数据而不是将其保存到文件中):
PS> [pscustomobject] @{ col1 = 1; col2 = 2, 3 } | ConvertTo-Csv
"col1","col2"
"1","System.Object[]"
也就是说,2, 3
存储在.col2
属性中的数组被字符串化为System.Object[]
,这是您调用.ToString()
常规 PowerShell 数组时得到的结果;其他 .NET 集合类型 - 例如[System.Collections.Generic.List[string]]
在您的情况下 - 类似地进行字符串化;也就是说,通过它们的类型名称。
假设您想在单个CSV 列中表示数组值属性的所有值,要解决此问题,您必须为整个集合确定一个有意义的字符串表示形式Select-Object
,并使用计算属性实现它:
例如,您可以使用-join
运算符创建以空格分隔的元素列表:
PS> [pscustomobject] @{ col1 = 1; col2 = 2, 3 } |
Select-Object col1, @{ n='col2'; e={ $_.col2 -join ' ' } } |
ConvertTo-Csv
"col1","col2"
"1","2 3"
注意 array2, 3
是如何变成 string'2 3'
的。