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

PowerShell数组使用-ne做多值比较并删除不符合元素的实现问题

问题原因

你写的代码存在几处明显错误:

  • 调用Get-ChildItem时加了-Name参数,返回的$Array元素都是纯字符串,没有Name属性,不需要额外调用.Name
  • 不能在foreach遍历ArrayList的过程中直接删除元素,遍历过程中数组长度变化会导致遍历逻辑异常、漏处理元素
  • 多值匹配的判断语法错误,PowerShell中判断值不在指定集合内需要用-notin操作符,不能直接用-ne后接多个值
  • 你写的允许值列表语法有误,缺少逗号、存在多余的末尾逗号

推荐解决方法(更简洁)

直接过滤出你需要保留的三个值,覆盖原有数组即可,不需要遍历删除:

$Array = $Array | Where-Object { $_ -in "Classes", "IM Providers", "Intel" }

如果要保留ArrayList类型,可以改成:

[System.Collections.ArrayList]$Array = $Array | Where-Object { $_ -in "Classes", "IM Providers", "Intel" }

遍历删除的正确实现

如果确实需要通过遍历删除的方式实现,要倒序遍历数组索引,从最后一位往第一位删,避免删除元素后索引错乱:

for ($i = $Array.Count - 1; $i -ge 0; $i--) {
    if ($Array[$i] -notin "Classes", "IM Providers", "Intel") {
        $Array.RemoveAt($i)
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:15:09