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

PowerShell foreach循环添加元素报错:Add方法无匹配重载(参数数1)

问题解决:PowerShell中Foreach循环添加元素报错的原因及修复

错误根源

你代码里的核心问题是错误地将$logs的类型从ArrayList改成了哈希表(@{}):

$logs = New-Object System.Collections.ArrayList
$logs = $null
$logs = @{} # 这里把集合改成了哈希表,导致后续Add方法调用失败

哈希表的Add()方法要求传入两个参数(键名+对应值),但你传入的是单个哈希表对象,这就触发了Cannot find an overload for "Add" and the argument count: "1"的错误。

修复方案

方案1:修正ArrayList的使用

保留最初的ArrayList创建,移除错误的赋值语句,同时可选添加| Out-Null避免输出Add方法返回的索引值:

$logs = New-Object System.Collections.ArrayList

Get-Service | ForEach-Object {
    $logs.Add(@{
        "test"    = $_.DisplayName;
        "message" = "blah"
    }) | Out-Null
}  

$logs | ConvertTo-Json -Depth 10 

方案2:更简洁的PowerShell风格(推荐)

直接通过Foreach循环的输出收集结果到数组,无需手动调用Add方法:

$logs = Get-Service | ForEach-Object {
    @{
        "test"    = $_.DisplayName;
        "message" = "blah"
    }
}  

$logs | ConvertTo-Json -Depth 10 

补充说明

你提到“操作在循环外可正常执行”,大概率是因为循环外测试时$logs还是ArrayList类型,而后续代码里的$logs = @{}覆盖了之前的集合类型,导致循环内调用了哈希表的Add方法,才出现参数不匹配的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:20:38