Где-Объектная оптимизация Powershell - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть эта команда, которая работает правильно:

$FichierXML = get-childitem "$PsScriptRoot" | Where-Object { ($_.Name -notlike "creer*") -and ($_.Name -notlike "des*") -and ($_.Name -notlike "ins*")  -and ($_.Name -like "*.XML") }

Он находит .XML-файл, который не содержит в своем названии 3 слова "creer", "des" и "ins".

Мой вопрос: есть ли оптимальный способ сделать это вместо нескольких условий в объекте where, как я?Возможно, коротким путем?Конечно, это хорошо, но мне всегда интересно изучать лучшие методы.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Возможно, что-то вроде этого:

$FichierXML = Get-ChildItem "$PsScriptRoot" -Filter '*.XML' | Where-Object { $_.Name -notmatch '^(creer|des|ins)' }

Используйте параметр -Filter, чтобы получить только .XML файлы и используйте регулярное выражение -notmatch для имен файлов.

0 голосов
/ 05 декабря 2018

Есть операторы -in и -notin, но они проверяют множество значений на точное совпадение.Ничего подобного -notlikein или что-то в этом роде.

Не 100%, но считаю, что это должно работать:

$FichierXML = Get-ChildItem "$PSScriptRoot" |
                Where-Object {$_.Name -notmatch "^(creer|des|ins)" -and $_.Name -like "*.XML"}

Объяснение:

  • -[not]match использует регулярное выражение, -[not]like не
  • | действует как логический "или"
  • ^ указывает начало строки
  • ()^creer, ^ins

Связанные: Документация для операторов

edit : включены исправления из комментария Мэтта

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