Выходные данные PowerShell - PullRequest
0 голосов
/ 05 июня 2018

При написании команд на powershell иногда вывод распространяется в одну сторону, а иногда - в другую.Допустим, я использую команду

Get-ADUser -Filter * | ? {$_.name -eq "$name"}

, в этой ситуации я могу использовать Where-Object, как показано ниже, и иногда есть команды, заполняющие результаты другим способом, и по какой-то причине Where-Object неработает.

После небольшого исследования я обнаружил, что Select-String будет работать для меня для другой команды, которая запускается вместо Where-Object.

Так что мне стало интересно, что может бытьразличия между этими двумя выходами?

Спасибо

И, кстати, если у кого-то есть хороший учебный сайт, который может научить меня основам всей PowerShell с большей внутренней точки зрения, например, в чем разницамежду массивом и хеш-таблицей, то, что я уже знаю, не совсем простые вещи:)

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

ОК, видимо мне удалось также использовать Where-Object для фильтрации результатов команды.Это потому, что мой результат - 3 строки в каждой строке, поэтому использование «-eq» не сработало и дало мне пустой результат.Я изменил его на -match или -like **, и он нашел строку , в которой была искомая строка.

Для более ясного понимания я использовал команду "netusers / domain "- выводит результаты с 3 строками в каждой строке.

Так что спасибо за ответы:)

0 голосов
/ 05 июня 2018

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 также будет работать со значениями, которые не приводятся к строке.

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

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