You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell调用RestMethod导出CSV时如何展开System.Object[]字段值?

解决PowerShell导出CSV时嵌套对象与数组字段显示异常的问题

问题分析

脚本直接将computerStatus嵌套对象传入Select-Object,CSV导出时会把对象转为默认字符串格式(即@{agentStatus=active; agentStatusMessages=System.Object[]});而agentStatusMessages是数组类型,PowerShell默认不会展开数组内容,只会显示其类型名。

修改后的代码

$r = Invoke-RestMethod @param -Headers $headers -UseBasicParsing

$r.computers | Select-Object hostName,lastIPUsed,platform,
    # 提取嵌套的agentStatus作为单独列
    @{Name='AgentStatus'; Expression={$_.computerStatus.agentStatus}},
    # 将agentStatusMessages数组拼接为字符串,可按需修改分隔符
    @{Name='agentStatusMessages'; Expression={$_.computerStatus.agentStatusMessages -join '; '}} |
    ConvertTo-Csv -NoTypeInformation

代码说明

  1. 拆分嵌套对象:通过计算属性(@{Name=; Expression=})从computerStatus中提取agentStatus字段,作为独立的CSV列。
  2. 处理数组字段:使用-join运算符将agentStatusMessages数组的所有元素拼接成单个字符串,避免CSV中显示类型名System.Object[]。如果数组只有一个元素,拼接后直接显示该元素;如果有多个元素,会用指定分隔符(示例中是分号)连接所有内容。

预期输出

"hostName","lastIPUsed","platform","AgentStatus","agentStatusMessages"
"srv01","10.1.1.2","Red Hat Enterprise 7 (64 bit)","active","Managed (Online)"
"srv02","10.1.2.3","CentOS 7 (64 bit)","active","Managed (Online)"
"srv03","10.1.2.4","Microsoft Windows Server 2019 (64 bit)","active","Managed (Online)"

内容的提问来源于stack exchange,提问作者TW01 TW01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 00:42:41