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
相关产品推荐
相关产品推荐

