我对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[]
而不是值?
答案 0 :(得分:3)
值是一个数组。如果您运行$tmp_avs.ToString()
,您还会获得System.Object[]
要解决此问题,请将avs=$tmp_avs
替换为avs=$($tmp_avs -join " ")
,其中是数组元素之间的连接字符。它将数组转换为字符串。
<强>代码:强>
$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
答案 1 :(得分:0)
如果您不想看到System.object [],但是以逗号分隔的列表,您可以将数组转换为字符串,这样就可以用CSV正确输出。
尝试将$tmp_avs = $tmp_avs -join ";"
添加到行$tmp_avs = @('tmp', 'tmp2')
下方的脚本中。