PowerShell 将数组元素添加至另一数组时提示无op_Addition方法如何解决
报错根因
你没有提前声明$ClientNotHRSeparated和$ClientHRSeparated为数组类型,第一次执行+=赋值时,PowerShell会自动将变量类型判定为和右值一致的PSObject类型,后续再次执行+=操作时,PSObject对象没有对应的加法运算符实现,就会抛出该错误。
解决方案
方案1:提前初始化数组(兼容原有循环写法)
在循环执行前先声明两个空数组即可:
$JsonDB = Get-Content 'Q:\Technology\1AA\HardwareCollection.json' | Out-String | ConvertFrom-Json # 提前初始化空数组 $ClientNotHRSeparated = @() $ClientHRSeparated = @() foreach($client in $JsonDB) { if($client.HRSeparation -eq "No") { $ClientNotHRSeparated += $client } else { $ClientHRSeparated += $client } } $JsonDB
注意:数组+=操作每次都会创建新数组并拷贝所有原有元素,数据量较大时性能较低,更推荐下面的原生筛选写法。如果你的JSON文件根节点是单个对象而非数组,可在转换时用@()包裹强制转为数组,避免遍历逻辑异常:$JsonDB = @(Get-Content 'Q:\Technology\1AA\HardwareCollection.json' | Out-String | ConvertFrom-Json)
方案2:使用PowerShell原生筛选(更高效简洁)
不需要手动写循环,直接用Where-Object筛选即可,PowerShell会自动返回数组类型:
$JsonDB = Get-Content 'Q:\Technology\1AA\HardwareCollection.json' | Out-String | ConvertFrom-Json $ClientNotHRSeparated = $JsonDB | Where-Object { $_.HRSeparation -eq "No" } $ClientHRSeparated = $JsonDB | Where-Object { $_.HRSeparation -ne "No" }
内容的提问来源于stack exchange,提问作者Listor
相关产品推荐
相关产品推荐

