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
代码说明
- 拆分嵌套对象:通过计算属性(
@{Name=; Expression=})从computerStatus中提取agentStatus字段,作为独立的CSV列。 - 处理数组字段:使用
-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
相关产品推荐
相关产品推荐

