我有一个对象列表,想要过滤名称类似于列表中的字符串之一的所有元素。我当前的方法是使用where-object,但这会导致对 where-object 的一长串调用。
Get-AppxPackage |
where-object {$_.name -notlike "*store*"} |
where-object {$_.name -notlike "*MSPaint*"} ...
Run Code Online (Sandbox Code Playgroud)
我想减少这里所需的样板,因为我预计字符串列表会变得相当大。
我还希望能够在另一个输出上使用过滤器,这似乎我目前只能通过复制粘贴 where-object 块来实现。
您可以使用正则表达式notmatch代替。这执行起来会快很多。\n类似
Get-AppxPackage | Where-Object {$_.name -notmatch \'store|MSPaint\'} \nRun Code Online (Sandbox Code Playgroud)\n\n您可以从数组或通过读取文本文件来构建模式,而不是输入不匹配的文字名称。\n假设您在文本文件中有一个名称列表
\n\nstore\nMSPaint\n...\nRun Code Online (Sandbox Code Playgroud)\n\n然后您可以将此文件作为数组读取
\n\n$list = Get-Content -Path "<PATH TO THE FILE>"\nRun Code Online (Sandbox Code Playgroud)\n\n接下来结合这个列表来构建如下模式
\n\n$pattern = (($list | ForEach-Object {[regex]::Escape($_)}) \xe2\x80\x93join "|")\nRun Code Online (Sandbox Code Playgroud)\n\n并做
\n\nGet-AppxPackage | Where-Object {$_.name -notmatch $pattern} \nRun Code Online (Sandbox Code Playgroud)\n\n希望这可以帮助
\n| 归档时间: |
|
| 查看次数: |
17063 次 |
| 最近记录: |