PowerShell如何不用for循环通过管道从ArrayList中移除指定对象
PowerShell 无for循环移除ArrayList元素的管道实现方法
完全可以不写for循环实现需求,你要的管道实现方案有两种可选:
方案1:直接筛选保留符合规则的元素(最简洁)
你需要移除不符合^[a-f0-9]{32}( )规则的元素,直接对原变量做匹配筛选后重新赋值即可,不需要单独存储要移除的错误条目:
$remoteFiles = $remoteFiles | Select-String -Pattern '^[a-f0-9]{32}( )'
方案2:基于已有的错误列表做排除
如果你已经提前把要移除的内容存到了$remotesumerrors变量,直接用Where-Object做排除过滤即可:
# 注意Select-String返回的是MatchInfo对象,需要取Line属性和原内容匹配 $remoteFiles = $remoteFiles | Where-Object { $_ -notin $remotesumerrors.Line }
强类型ArrayList适配
如果你用的是[System.Collections.ArrayList]类型的强类型数组,筛选后做一次类型转换即可,依然不需要写for循环:
$remoteFiles = [System.Collections.ArrayList]($remoteFiles | Select-String -Pattern '^[a-f0-9]{32}( )')
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

