C# эквивалент входной переменной PowerShell $

Я создаю командлеты PowerShell на C#, расширяя класс PSCmdlet. Мне нужно получить весь конвейерный ввод для использования в коде C#. Я попытался установить параметр со свойствами, установленными как:

[Parameter(Mandatory = true, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
public Object Connection;

Когда я пытаюсь выполнить командлет, передав список элементов, я получаю один элемент за раз для обработки в коде C#.

$a=@("value1","value2")
$a | cmdlet-name

Мне нужно получить весь переданный по конвейеру ввод для обработки в моем коде С#. Я обнаружил, что это можно получить в PowerShell, используя переменную $input. Существует ли эквивалент C# этой переменной PowerShell $input?


person Vijay    schedule 27.02.2014    source источник


Ответы (1)


Не то, что я знаю о. Однако вы можете использовать метод ProcessRecord для накопления объектов конвейера (из свойства, привязанного к входным данным конвейера) в коллекцию, а затем обрабатывать накопленные объекты в методе EndProcessing.

person Keith Hill    schedule 27.02.2014
comment
Я не уверен, но для каждого конвейерного элемента метод ProcessRecord выполняется один раз? если да, есть ли способ узнать текущий номер прохода метода ProcessRecord? - person Vijay; 27.02.2014
comment
Да ProcessRecord выполняется для каждого объекта конвейера. Имейте в виду, что один объект конвейера может быть массивом в зависимости от того, как вы определяете свойство, привязанное к конвейеру. Я не знаю встроенного способа определения номера прохода, но вы всегда можете добавить поле int в свой командлет и увеличивать его каждый раз, когда вызывается ProcessRecord. - person Keith Hill; 27.02.2014