5

入力パラメーターとして渡されたスクリプトブロックに基づいてスクリプトブロックを動的に作成することにより、スクリプトブロックを返す powershell 関数を作成したいと考えています。あまり運が良くないようです。

スクリプトブロックを 2 回呼び出すメソッドを作成するのは簡単です。

$x = { write-host "Hello" }
function DoIt([scriptblock] $s) { $s.Invoke(); }
function DoItTwice([scriptblock] $s) { $s.Invoke(); $s.Invoke(); }

DoIt($x)
DoItTwice($x)

(入力) スクリプト ブロックを 2 回呼び出す効果を持つスクリプト ブロックを返すメソッドを記述するのは困難です。以下は動作しません

function TwiceAsScriptBlock([scriptblock] $s)
{
    function twice
    {
        $s.Invoke();
        $s.Invoke();
    }
    return { twice }
}
4

1 に答える 1

10

これはあなたのためにトリックを行います:

function TwiceAsScriptBlock([scriptblock] $s)
{

    $ScriptBlock = [System.Management.Automation.ScriptBlock]::Create("$s ; $s")
    Return $ScriptBlock 
}

Powershell リターン スクリプトブロック

于 2013-02-14T16:12:49.213 に答える