[英]Invoke-Command with dynamic function name
我找到了這個很棒的帖子: 在帶參數的函數上使用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"
替代解決方案:
function foo {'I am foo!'}
$name = 'foo'
$sb = (get-command $name -CommandType Function).ScriptBlock
invoke-command -scriptblock $sb
我很好!
您可以嘗試以下方法。 它會在嘗試運行它之前測試指定的名稱是否為有效函數:
$myfuncnamevar = "Foo"
Invoke-Command -ScriptBlock {
param($name)
if (Test-Path Function:\$name) {
#Function exists = run it
& $name
}
} -ArgumentList $myfuncnamevar
很簡單:
invoke-expression $name
或者如果你想保持invoke-commande用於遠程處理,例如
Invoke-Command -ScriptBlock { invoke-expression $name}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.