将自定义对象导出到 CSV

Export custom object to CSV

我是 powershell 的新手,在将数据输出到 CSV 文件方面遇到了困难。 我有一个更大的代码片段,但创建了以下包含问题的小工作示例:

$results = @()
$tmp_avs = @('tmp', 'tmp2')
$hostname = 'hostname'
$results += New-Object -TypeName PSObject -Property (@{Hostname=$hostname; avs=$tmp_avs})
$res = $results | ? {$_.avs.Count -gt 0} | Format-Table

$res | Export-Csv -NoTypeInformation "test.csv"

在 PowerShell 中打印上面的 $res 对象时,我得到输出:

avs         Hostname
---         --------
{tmp, tmp2} hostname

这也是我希望在 CSV 文件中收到的输出,但目前我得到的是这样的:

"ClassId2e4f51ef21dd47e99d3c952918aff9cd","pageHeaderEntry","pageFooterEntry","autosizeInfo","shapeInfo","groupingEntry"
"033ecb2bc07a4d43b5ef94ed5a35d280",,,,"Microsoft.PowerShell.Commands.Internal.Format.TableHeaderInfo",
"9e210fe47d09416682b841769c78b8a3",,,,,
"27c87ef9bbda4f709f6b4002fa4af63c",,,,,
"4ec4f0187cb04f4cb6973460dfe252df",,,,,
"cf522b78d86c486691226b40aa69e95c",,,,,

是否有可能以正确的 CSV 格式导出 $res 对象?

编辑: 我现在删除了 Format-Table,这导致 CSV 格式如下:

"avs","Hostname"
"System.Object[]","hostname"

System.Object[] 而不是数值?

值是一个数组。如果你运行$tmp_avs.ToString(),你也会得到System.Object[]

要解决,请将 avs=$tmp_avs 替换为 avs=$($tmp_avs -join " "),其中 </code> 是数组元素之间的连接字符。它将数组转换为字符串。</p> <p><strong>代码:</strong></p> <pre><code>$results = @() $tmp_avs = @('tmp', 'tmp2') $hostname = 'hostname' $results = New-Object -TypeName PSObject -Property (@{Hostname=$hostname; avs=$($tmp_avs -join " ")}) $res = $results | ? {$_.avs.Count -gt 0} $res | Export-Csv -NoTypeInformation "test.csv"

输出:

avs,Hostname
tmp tmp2, hostname

如果您不想看到 System.object[],而是一个逗号分隔的列表,您可以将数组转换为字符串,以便以 CSV 格式正确输出。

尝试在 $tmp_avs = @('tmp', 'tmp2').

行下方的脚本中添加 $tmp_avs = $tmp_avs -join ";"