Фильтрация вывода с помощью "Where-Object" в Powershell

Я пытаюсь попасть в PowerShell и столкнулся с моим первым препятствием.

когда я запускаю

Get-Command | Where-Object CommandType -contains Cmdlet

мой вывод фильтруется так, что отображаются только команды со значением свойства "CommandType", содержащие "командлет", например:

enter image description here

то же самое можно сделать с объектом "источник":

Get-Command | Where-Object Source -contains appx

что получает меня:

enter image description here

но когда я пытаюсь беги:

Get-Command | Where-Object Name -contains Add

Я ничего не получу. Почему я могу фильтровать вывод по объектам " CommandType "и"Source но не "Name"? Я определенно что-то упускаю...

Edit: я знаю, что могу запустить:

Get-Command -verb "get"

и получить желаемый результат. Но я пытаюсь понять, почему мое утверждение "где-объект" не сработало.

Edit 2:

внешне, если я использую оператор сравнения "- match", он работает...

get-command | where-object Name -match "add"

но это не " имя" свойства просто строки? - матч следует использовать для сравнения регулярных выражений afaik? Я сейчас в замешательстве...

1 ответов


использовать like или match оператор:

Get-Command | Where-Object Name -like Add*

это будет соответствовать добавить в любом месте в слове

Get-Command | Where-Object Name -match Add

но лучший способ сделать это было бы:

Get-Command -verb Add

подробнее о операторе contains здесь

-содержит Описание: оператор сдерживания. Говорит ли коллекция ссылок значения включают одно тестовое значение. Всегда возвращает логическое значение. вернуть true только когда тестовое значение точно соответствует хотя бы одному из эталонных значений.

      PS C:\> "abc", "def" -Contains "def"
      True