Как передать вывод foreach-объекта в функцию, принимающую входные данные конвейера? - PullRequest
1 голос
/ 29 июня 2019

Насколько я понимаю, это очень простая проблема.Здесь много подобных вопросов, но я не смог найти именно то, что мне нужно.Чего мне не хватает?

Ожидаемый вывод

1 2 3

Фактический вывод (ошибка)

cmdlet ForEach-Object at command pipeline position 1
Supply values for the following parameters:
Process[0]:

Код

function processItem {
  param($item)
  Process {
    $item
  }
}

$collection = @(1,2,3)

$collection | foreach-object | processItem

1 Ответ

4 голосов
/ 29 июня 2019

Во-первых, вам не нужно использовать Foreach-Object здесь, потому что конвейер непосредственно развернет $items и отправит по одному значению за раз вашей функции processItem.

Передача массивов в конвейер

Если функция возвращает более одного значения, PowerShell упаковывает их в массив.Однако, если вы передадите результаты другой функции внутри конвейера, конвейер автоматически "развернет" массив и обработает по одному элементу массива за раз.

Параметр $item в функции notn 'Чтобы принять конвейерный ввод в вашем коде, вы должны использовать ValueFromPipeline следующим образом:

function processItem {
  param([parameter(ValueFromPipeline=$true)]$item)
  Process {
    $item
  }
}

Использовать так:

$items = @(1, 2, 3)
$items | processItem
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...