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是一个脚本块.
function:
是功能提供商的PsDrive.所有功能都存储在此驱动器上.还有其他PsDrives包括variable:
和env:
.退房Get-PsProvider
以及Get-PsDrive
更多信息.
要从function:
驱动器访问函数(获取其内容,而不是调用它),请使用$function:foo
foo是要访问的函数的名称.
只有在访问名称中具有特殊字符的变量时才需要使用大括号.
函数的内容是脚本块,这就是它被用作脚本块参数的原因Invoke-Command
.
function:
psdrive 中的每个东西都是一个脚本块,而scriptblock对象有一个Invoke
允许你执行它们的方法.