PowerShell 如何在Where-Object中通过Foreach校验数组属性匹配
正确写法
你标注位置的代码可以直接用PowerShell内置的-in操作符实现需求,写法如下:
Where-Object { $_.ID -in $IDFilterList }
如果你的运行环境是PowerShell 2.0,不支持-in操作符,也可以用-contains操作符反过来写:
Where-Object { $IDFilterList -contains $_.ID }
如果你需要的不是完全匹配ID,而是像你原代码里的-match那样做正则模糊匹配,可以用下面的写法:
Where-Object { foreach ($id in $IDFilterList) { if ($_.ID -match $id) { return $true } } return $false }
另外你原代码还有两处语法错误需要同步修正:
- 第一个
Where-Object的过滤条件没有闭合右括号 - 第一个
Where-Object的条件后面多了多余的管道符
修正后的完整代码如下:
$IDFilterList = @("1" , "2", "3", "4", "5", "6", "7", "8", "9") if ($file.Name.Contains("SomeStuff")) { $ImportendCollection += $Result | Where-Object { ($_.Level -Match 1) -or ($_.Level -Match 2) -or ($_.Level -Match 3) } | Where-Object { $_.ID -in $IDFilterList } | Group-Object -Property id, LevelDisplayName, LogName -NoElement | Sort-Object -Property count -Descending }
内容的提问来源于stack exchange,提问作者Larry
相关产品推荐
相关产品推荐

