У меня есть функция mainFunction
, которая получает 2 параметра: $name
будет обычной строкой, а $moveFunction
будет какой-то функцией.
Я хочу запустить задание ScriptBlock ($SB
), которое будет вызывать $moveFunction
с $name
в качестве аргумента.
function foo($a){
Write-Output "In function foo with the argument => $a"
}
$SB = {
param($C, $fooFunction)
$fooFunction.Invoke($C)
}
function mainFunction($name, $moveFunction){
Start-Job -Name "currentJob" -ArgumentList $name, ${Function:$moveFunction} -ScriptBlock $SB
}
$j1 = mainFunction -name "output!" -moveFunction $Function:foo
Я проверил, что $moveFunction
уже существует в mainFunction
($moveFunction.invoke(5)
в mainFunction
)
Я не могу найти проблему в передаче функции в качестве аргумента в start-job.
и из Get-Job -Name "CurrentJob" | Receive-Job
я получаю:
You cannot call a method on a null-valued expression.
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
+ PSComputerName : localhost
Любая помощь будет оценена по достоинству.
edit: проблема, скорее всего, в том, как я передаю функцию в качестве аргумента (${Function:$moveFunction}
$func = [ScriptBlock]::Create($func)
, чтобы преобразовать эту строку обратно в правильный SB и вызвать как обычно. - person RiverHeart   schedule 26.11.2018