2015-11-06 3 views
0

В качестве примера здесь я использую Test-Path.Может ли функция обрабатывать несколько пользовательских объектов без использования конвейера?

Вы можете передать массив в качестве параметров функции:

Test-Path 'C:\', 'G:\

Или они могут быть по конвейеру:

'C:\', 'G:\ | Test-Path

Теперь это достаточно просто, как это просто массив строки.

Но что, если я хотел сделать это с объектами?

Опять же, я просматриваю детали здесь. Но у меня есть функция, которая имеет 3 аргумента:

  1. Строка (обязательно)
  2. String (опционально)
  3. Switch (факультативные)

Если я звоню функцию с только один объект. Все эти обращения действительны.

My-Function -RequiredString 'requiredstring' -OptionalString 'optionalstring' -MySwitch 
My-Function -RequiredString 'requiredstring' 
My-Function -RequiredString 'requiredstring' -MySwitch 

Если я хочу обрабатывать сразу несколько объектов. Я делаю что-то вроде этого:

$objs = @(
    (New-Object PSObject -Property @{ RequiredString='requiredstring'; OptionalString='optionalstring'; MySwitch=$true}), 
    (New-Object PSObject -Property @{ RequiredString='requiredstring'}), 
    (New-Object PSObject -Property @{ RequiredString='requiredstring'; MySwitch=$true}) 
) 

$objs | My-Function 

Есть ли способ, что я могу вызвать функцию для обработки нескольких объектов без использования трубопровода?

ответ

1

No.

Если вы хотите передать массив объектов в функции, функции необходимо будет переписан ожидать и перебирать массив.

Конвейер делает это для вас, путем «разворачивания» массива и передачи одного объекта за раз в функцию. Если вы хотите передать массив в качестве параметра, то эта функция разворачивания/итерации должна выполняться внутри функции.

+0

Не тот ответ, на который я надеялся, но все в порядке. Трубопроводы объектов прекрасны. Я просто надеялся, что они могут быть переданы как массив, поэтому я мог бы сделать «отчетность» на них в блоке «end». но хорошо. – Jake

+0

Вы все равно можете заставить функцию работать с массивом. Вы просто ничего не можете сделать в синтаксисе вызова, который заставит его работать с массивом, переданным как параметр, если он был написан для работы со скаляром (единственным объектом). – mjolinor

+0

Все в порядке. Использование входных каналов не является проблемой. – Jake

Смежные вопросы