Как отфильтровать список со списком строк в powershell - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть список объектов и я хочу отфильтровать все элементы, чье имя похоже на одну из строк в списке. Мой текущий подход заключается в использовании where-object, но это приводит к длинной цепочке обращений к where-object.

Get-AppxPackage |
    where-object {$_.name -notlike "*store*"} |
    where-object {$_.name -notlike "*MSPaint*"} ...

Я бы хотел уменьшить шаблон, необходимый здесь, так как я ожидаю, что список строк станет довольно большим.
Кроме того, я хотел бы иметь возможность использовать фильтр на другом выходе, что, по-видимому, в настоящее время я могу сделать только путем копирования вставки блока where-object.

1 Ответ

0 голосов
/ 03 сентября 2018

Вместо этого вы можете использовать регулярное выражение notmatch. Это будет намного быстрее, чтобы выполнить. Что-то вроде

Get-AppxPackage | Where-Object {$_.name -notmatch 'store|MSPaint'} 

Вместо того, чтобы вводить буквенные имена в , а не , вы можете построить шаблон из массива или считав текстовый файл. Допустим, у вас есть список имен в текстовом файле

store
MSPaint
...

Затем вы можете прочитать этот файл как массив с помощью

$list = Get-Content -Path "<PATH TO THE FILE>"

Далее объедините этот список, чтобы построить шаблон, подобный

$pattern = (($list | ForEach-Object {[regex]::Escape($_)}) –join "|")

и сделать

Get-AppxPackage | Where-Object {$_.name -notmatch $pattern} 

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...