Как обратиться ко всему объекту конвейера без блока скрипта
С появлением PowerShell V3 вместо того, чтобы писать:
Get-Process | Where { $_.ProcessName -match "win" }
... теперь можно написать более кратко:
Get-Process | Where ProcessName -match "win"
... явная победа (гм) для использования оболочки.
Теперь скажем, у меня был простой массив строк, назовите его $stuff
, Можно ли уменьшить это:
$stuff | Where { $_ -match "win" }
... аналогично первому примеру, т.е. удалить блок скрипта и сослаться на весь объект, в этом случае?
2 ответа
Уменьшить
$stuff | Where { $_ -match "win" }
Вы всегда можете сделать это так (работает для всех версий PowerShell):
$stuff = "a","b","win", "winona", "d", "windows"
$stuff -match "win"
win
winona
windows
Форма Get-Process | Where ProcessName -match "win"
называется оператором сравнения. Это плохо документированная функция, так как Where-Object
Документация действительно не объясняет, что это такое.
Оператор сравнения причин работает на Get-Process
но не для $stuff
является то, что первый возвращает массив System.Diagnostics.Process
объекты whlist, позже String
, Операторы сравнения ожидают имя свойства для фильтрации.
Давайте посмотрим, что доступно в каждом элементе массива. Прежде всего процессы, как так,
$proc = get-process
gm -InputObject $proc[0] -MemberType property
TypeName: System.Diagnostics.Process
Name MemberType Definition
...
ProcessName Property string ProcessName {get;}
...
Итак, есть ProcessName
собственность, таким образом Where-Object
может фильтровать с ним, как видно.
Строковый массив:
$stuff = @("foo", "bar", "zoffo", "qazzer")
gm -InputObject $stuff[0] -MemberType property
TypeName: System.String
Name MemberType Definition
Length Property int Length {get;}
Есть только одно свойство в String
это его длина. Конечно же, его можно использовать для фильтрации, например,
$stuff | where length -ne 3
zoffo
qazzer
$stuff | where length -eq 3
foo
bar
Поскольку нет других членов с типом свойства, единственный способ отфильтровать массив строк с помощью классического режима блока скрипта.