如果您将对象导出为 CSVExport-Csv
or ConvertTo-Csv
has 属性值包含收藏 (array)值,这些值是通过他们的字符串化.ToString()
method,这会导致无用的表示,就像数组值的情况一样.IPV4Addresses
财产。
为了证明这一点ConvertTo-Csv
cmdlet(其工作方式类似于Export-Csv
, but returnsCSV 数据而不是将其保存到文件中):
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]]
在你的情况下 - 类似地进行字符串化;也就是说,通过他们的类型名称.
假设您想要表示数组值属性的所有值singleCSV 列,解决此问题你必须决定一个有意义的字符串表示形式对于整个集合并使用它来实现Select-Object
with a 计算属性 https://stackoverflow.com/a/39861920/45375:
例如,您可以使用-join
运算符创建以空格分隔的元素列表:
PS> [pscustomobject] @{ col1 = 1; col2 = 2, 3 } |
Select-Object col1, @{ n='col2'; e={ $_.col2 -join ' ' } } |
ConvertTo-Csv
"col1","col2"
"1","2 3"
注意数组如何2, 3
被变成了字符串'2 3'
.