函数可以在不使用管道的情况下处理多个自定义对象吗?

时间:2015-11-06 15:14:07

标签: powershell

我将Test-Path作为示例。

您可以将数组作为参数传递给函数:

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

或者他们可以用管道输送:

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

现在这很简单,因为它只是一个字符串数组。

但如果我想用对象做什么呢?

同样,我在这里详细介绍细节。但是我有一个有3个参数的函数:

  1. 字符串(必填)
  2. 字符串(可选)
  3. 开关(可选)
  4. 如果我只用一个对象调用该函数。所有这些调用都是有效的。

    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 个答案:

答案 0 :(得分:1)

没有。

如果要将一个对象数组传递给该函数,则需要重新编写该函数以期望并遍历该数组。

管道正在为您做这件事,通过“展开”数组并一次将一个对象传递给函数。如果要将数组作为参数传递,则需要在函数内部完成展开/迭代。