函数[Hashtable []]参数可以来自管道或参数

时间:2014-12-19 20:00:35

标签: arrays function powershell hashtable pipeline

这是一个通过参数接受哈希表数组的函数:

function abc () {

    Param([Hashtable[]]$tables)

    $tables.count

}

使用示例:

PS C:\> abc -tables @{ a = 10 }, @{ b = 20 }, @{ c = 30 }
3

这是一个通过管道接受Hashtables的函数:

function bcd () {

    Param([parameter(ValueFromPipeline=$true)][Hashtable]$table)

    $input.count

}

使用示例:

PS C:\> @{ a = 10 }, @{ b = 20 }, @{ c = 30 } | bcd
3

有没有办法定义可以通过参数或管道通过相同参数接受哈希表数组的函数?即可以用上面显示的两种方式调用的函数。请注意,我需要在单个变量中使用整个哈希表数组(因此在$input中使用上面的bcd)。

2 个答案:

答案 0 :(得分:4)

function bcd () {

    Param([parameter(ValueFromPipeline=$true)][Hashtable[]]$table)

    Begin {$tables= @()}
    Process {$tables += $table}
    End {$tables.count}

}

@{ a = 10 }, @{ b = 20 }, @{ c = 30 } | bcd
bcd -table @{ a = 10 }, @{ b = 20 }, @{ c = 30 }

3
3

答案 1 :(得分:3)

这是双模式(管道和命令行)参数的首选结构:

Function bcd () 
{
    Param(
       [parameter(ValueFromPipeline = $true)]
       [Hashtable[]]$table
    )

    Process 
    {
        ForEach ($tab in $table) 
        {  
          # do something with the table
        }
    }
}