0

在过去的几个小时里,我试图弄清楚如何将脚本块传递给一个函数,以用作 where 对象的过滤器。我还没有找到任何文档,我一定是遗漏了一些东西。我在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

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

4

1 回答 1

2

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

过滤器是一个函数,而不是一个脚本块。where-object将脚本块作为输入。如果要使用参数指定函数内的 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*'}

于 2013-03-20T23:39:45.707 回答