Есть ли способ получить доступ к объекту ввода после его передачи по каналу? - PullRequest
0 голосов
/ 19 сентября 2019

Есть ли способ передать весь объект через конвейер и обработать упомянутый объект за один шаг?Проще говоря, переменная $ PSItem на другой стороне моего конвейера должна иметь то же значение, что и весь объект, который был пропущен через конвейер.

Я обнаружил, что следующий метод имеет своего рода анонимные функции вЭто шикарно, хотя обрабатывает каждый элемент во входном объекте отдельно (так как для этого предназначен блок процесса в расширенных функциях).

Для этого код:

Get-Service | & {process {return $_.length}}

Возвраты: 1 1 1 1 1 1 1 ..

Мне нужен способ доступа к полному объекту с помощью переменной $ _ / $ PSItem после конвейера и дальнейшей его обработки / возвратасвойства этого объекта.

1 Ответ

0 голосов
/ 19 сентября 2019

Блок процесса в PowerShell может принимать в качестве входных данных одноэлементные массивы, что приводит к тому, что для обработки используется весь элемент массива, а не все члены объекта.

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

В следующем коде оператор запятой используется для помещения массива объектов, возвращаемого Get-Process, в один массив элементов.

,(Get-Process)

Теперь вы можете свободно использовать объект в конвейере и получать доступ к его свойствам.

,(Get-Process) | & {process {if($_.length -ge 10) {return "Greater / equals 10"}else{return "Smaller than 10"}}} 
...