Where-Object
работает с коллекцией объектов, возвращающих те объекты, которые соответствуют заданным критериям.Select-String
работает с набором строк, возвращающих те строки, которые соответствуют заданному выражению.Они похожи в том, что они позволяют вам фильтровать коллекцию вещи .Материал, который вы можете отфильтровать для одного, немного отличается от другого.Where-Object может фильтровать объекты на основе строковых свойств или свойств, приведенных к строкам.Он также может применять фильтры с использованием математических операторов (больше, меньше, чем, модуль и т. Д.) Для числовых свойств, сравнения объектов и т. Д.
Допустим, у меня есть файл с именем .gitignore
.Если бы я хотел видеть строки, содержащие фразу «пакет», я бы написал что-то вроде этого:
cat .gitignore | select-string 'paket'
Select-String находит мне строку или строки с искомой фразой.Я могу сделать то же самое с Where-Object
:
cat .gitignore | where { $_ -like '*paket*' }
В этом случае фильтруемый объект просто оказывается строкой, поэтому Select-String
и Where-Object
выглядят очень похоже.
Теперь давайте создадим список дат ...
$stuff = 1..10 | foreach { $(Get-Date).AddHours($(Get-Random -Minimum 1 -Maximum 25) * -1) }
Мы отфильтруем список дат по часам, где час больше 18 (18:00):
$stuff | Where-Object { $_.Hour -gt 18 }
В этом примере мы применили математическое выражение (больше чем) к свойству объекта.Это то, что Select-String
не будет делать.Where-Object
также будет работать со значениями, которые не приводятся к строке.
Надеюсь, это немного поможет.