Я нашел этот замечательный пост: Использование Invoke-Command -ScriptBlock на функция с аргументами
Я пытаюсь сделать вызов функции (${function:Foo}
) динамическим, так как я хочу передать имя функции.
Я пробовал это:
$name = "Foo"
Invoke-Command -ScriptBlock ${function:$name}
но это не удается. Я также пробовал различные escape-последовательности, но просто не могу сделать имя функции динамическим.
РЕДАКТИРОВАТЬ: Для ясности я добавляю небольшой тестовый скрипт. Конечно, желаемый результат - вызвать функцию 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"