0

ここ数時間、スクリプトブロックを関数に渡して、where オブジェクトのフィルターとして使用する方法を見つけようとしています。ドキュメントが見つかりませんでした。何か不足しているに違いありません。PowerShell に推奨されるコーディング スタイルは何ですか? で"filter script:" と "function:script" の定義を見ました。しかし、これらがどのように使用されているのかわからず、どこにも見つかりません。

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 に答える