В качестве примера здесь я использую Test-Path
.Может ли функция обрабатывать несколько пользовательских объектов без использования конвейера?
Вы можете передать массив в качестве параметров функции:
Test-Path 'C:\', 'G:\
Или они могут быть по конвейеру:
'C:\', 'G:\ | Test-Path
Теперь это достаточно просто, как это просто массив строки.
Но что, если я хотел сделать это с объектами?
Опять же, я просматриваю детали здесь. Но у меня есть функция, которая имеет 3 аргумента:
- Строка (обязательно)
- String (опционально)
- 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
Есть ли способ, что я могу вызвать функцию для обработки нескольких объектов без использования трубопровода?
Не тот ответ, на который я надеялся, но все в порядке. Трубопроводы объектов прекрасны. Я просто надеялся, что они могут быть переданы как массив, поэтому я мог бы сделать «отчетность» на них в блоке «end». но хорошо. – Jake
Вы все равно можете заставить функцию работать с массивом. Вы просто ничего не можете сделать в синтаксисе вызова, который заставит его работать с массивом, переданным как параметр, если он был написан для работы со скаляром (единственным объектом). – mjolinor
Все в порядке. Использование входных каналов не является проблемой. – Jake