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

PowerShell函数返回ArrayList转JSON出现多余元素问题排查

PowerShell函数返回ArrayList转JSON多元素的原因及解决

错误根源:ArrayList.Add()的返回值被混入函数输出

System.Collections.ArrayList的Add()方法会返回新添加元素的索引位置(比如第一个元素返回0,第二个返回1)。而PowerShell函数的默认行为是:所有未被抑制的命令输出,都会被收集到函数的返回结果中。

在你的封装函数里,当执行$arrayList.Add($hash)时,这个方法返回的索引值会和$arrayList对象一起,作为函数的返回内容,最终形成一个包含「索引整数」和「ArrayList」的混合数组。转JSON时,自然会把这两个整数也包含进去,就出现了多余的0、1元素。

为什么无函数的代码正常?

无函数时,Add()返回的索引值只是直接打印到控制台,并没有被存入你要转JSON的变量里。你最终转JSON的只是纯净的ArrayList对象,所以结果正常。

解决方法:抑制Add()的返回值

只需要把Add()的返回值丢弃,不让它进入函数的返回流即可,两种常用写法:

方法1:用$null接收返回值

function XYZ {
    $arrayList = New-Object System.Collections.ArrayList
    $null = $arrayList.Add(@{Name="Test1"; Value="Value1"})
    $null = $arrayList.Add(@{Name="Test2"; Value="Value2"})
    return $arrayList
}

# 调用后转JSON
(XYZ) | ConvertTo-Json

方法2:用[void]抑制输出

function XYZ {
    $arrayList = New-Object System.Collections.ArrayList
    [void]$arrayList.Add(@{Name="Test1"; Value="Value1"})
    [void]$arrayList.Add(@{Name="Test2"; Value="Value2"})
    return $arrayList
}

# 调用后转JSON
(XYZ) | ConvertTo-Json

这样函数返回的就只有纯净的ArrayList对象,转JSON时就不会出现多余的元素了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 15:42:41