Фильтрация вывода с помощью "Where-Object" в Powershell
Я пытаюсь попасть в PowerShell и столкнулся с моим первым препятствием.
когда я запускаю
Get-Command | Where-Object CommandType -contains Cmdlet
мой вывод фильтруется так, что отображаются только команды со значением свойства "CommandType", содержащие "командлет", например:
то же самое можно сделать с объектом "источник":
Get-Command | Where-Object Source -contains appx
что получает меня:
но когда я пытаюсь беги:
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