将自定义对象导出到 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 ";"
我是 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 ";"