Как обратиться ко всему объекту конвейера без блока скрипта

С появлением 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

Поскольку нет других членов с типом свойства, единственный способ отфильтровать массив строк с помощью классического режима блока скрипта.

Другие вопросы по тегам