5

私はこのPowerShellスクリプトを持っています:

function Func1 ($val)
{
  Write-Host "$val is processed by Func1";
}

function Func2($val)
{
  Invoke-Command -ScriptBlock `
  ${function:Func1} -ArgumentList "$val is processed by Func2 and";
}

function Func3($val)
{
  $function:Func2.Invoke("$val is processed by Func3 and");
}

Func3 "Value";

これは機能します-出力値はFunc3によって処理され、Func2によって処理され、Func1によって処理されます-しかし、私は2つのことに混乱しています。

Func2の${function:function-name}コード(つまり、ドル記号、開始中括弧、関数、コロン、関数名、終了中括弧)はどういう意味ですか?Func1を呼び出すことはわかりますが、なぜ機能するのかよくわかりません。

Func3の$function:function-name.Invokeコードはどういう意味ですか?Invokeメソッドが呼び出されるため、スクリプトブロック機能を使用しているように感じますが、 $function.function-nameがスクリプトブロックであるかどうかはわかりません。

4

1 に答える 1

6

function:関数プロバイダーのPsDriveです。すべての機能はこのドライブに保存されます。variable:およびを含む他のPsDriveがありenv:ます。詳細については、チェックアウトGet-PsProviderGet-PsDriveてください。

function:ドライブから関数にアクセスするには(呼び出しではなく、その内容を取得します)、$function:fooここでfooはアクセスする関数の名前です。

中括弧は、名前に特殊文字が含まれる変数にアクセスする場合にのみ必要です。

関数の内容はスクリプトブロックであるため、のscriptblockパラメーターとして使用されていますInvoke-Command

psdrive内のすべてのものはfunction:スクリプトブロックになり、scriptblockオブジェクトにはInvokeそれらを実行できるメソッドがあります。

于 2013-03-24T07:35:13.973 に答える