PowerShell中的美元符号,函数关键字和脚本块

Tol*_*ayi 5 powershell function dollar-sign

我有这个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";
Run Code Online (Sandbox Code Playgroud)

这工作 - 它输出值由Func3处理并由Func2处理并由Func1处理 - 但我对两件事感到困惑:

是什么在$ {函数:function-name}的代码(即一个美元符号后面用大括号其次是功能,后跟一个冒号后面的功能,然后右大括号的名称)FUNC2是什么意思?我可以看到它调用Func1,但我真的不明白它为什么会起作用.

Func3 中的$ function:function-name.Invoke代码是什么意思?我觉得它正在使用脚本块功能,因为调用了Invoke方法,但我不清楚$ function.function-name是一个脚本块.

And*_*ndi 6

function:是功能提供商的PsDrive.所有功能都存储在此驱动器上.还有其他PsDrives包括variable:env:.退房Get-PsProvider以及Get-PsDrive更多信息.

要从function:驱动器访问函数(获取其内容,而不是调用它),请使用$function:foofoo是要访问的函数的名称.

只有在访问名称中具有特殊字符的变量时才需要使用大括号.

函数的内容是脚本块,这就是它被用作脚本块参数的原因Invoke-Command.

function:psdrive 中的每个东西都是一个脚本块,而scriptblock对象有一个Invoke允许你执行它们的方法.