如何将自定义过滤器函数传递给Where-Object

时间:2013-03-20 23:18:23

标签: powershell powershell-v2.0

在过去的几个小时里,我试图弄清楚如何将一个scriptblock传递给一个函数,以用作对象所在的过滤器。我没有找到任何文件,我必须遗漏一些东西。我在What is the recommended coding style for PowerShell?中看到了“过滤器脚本:”和“函数:脚本”定义,但我不知道这些是如何使用的,我无法在任何地方找到它。

function Test
{
    Param(
            $f,     
            $What
    )

    $x = $What | where $f
    $x
}

$mywhat = @('aaa', 'b', 'abb', 'bac') 
filter script:myfilter {$_ -like 'a*'}
Test -What $mywhat -xx $myfilter

有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

目前还不清楚你在这里要求的是什么。

过滤器是一个函数,而不是一个scriptblock。 where-object将scriptblock作为输入。如果要使用参数指定函数内的where条件,可以使用scriptblock-parameter。

function Test
{
    Param(
            [scriptblock]$f,     
            $What
    )

    $x = $What | where $f
    $x
}

$myfilter = {$_ -like 'a*'}
Test -What $mywhat -f $myfilter

#or combine them
Test -What $mywhat -f {$_ -like 'a*'}

如果您只是想使用过滤器,那么这是如何做到的:

filter script:myfilter { if($_ -like 'a*') { $_ }}

$mywhat | myfilter

这将等于$mywhat | where {$_ -like 'a*'}