我发现了这篇很棒的帖子:在带参数的函数上使用 Invoke-Command -ScriptBlock
我正在尝试使函数调用 ( ${function:Foo}
) 动态化,就像我想传递函数名称一样。
我试过这个:
$name = "Foo"
Invoke-Command -ScriptBlock ${function:$name}
但这失败了。我也尝试了各种转义序列,但就是不能让函数名是动态的。
编辑:为清楚起见,我添加了一个小测试脚本。当然,想要的结果是调用ExternalFunction
.
Function ExternalFunction()
{
write-host "I was called externally"
}
Function InternalFunction()
{
Param ([parameter(Mandatory=$true)][string]$FunctionName)
#working: Invoke-Command -ScriptBlock ${function:ExternalFunction}
#not working: Invoke-Command -ScriptBlock ${invoke-expression $FunctionName}
if (Test-Path Function:\$FunctionName) {
#working,but how to use it in ScriptBlock?
}
}
InternalFunction -FunctionName "ExternalFunction"