在过去的几个小时里,我试图弄清楚如何将一个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
有人可以指出我正确的方向吗?
答案 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*'}