Я пытаюсь создать фоновое задание, которое выполняет скриптовый блок. Мне нужно передать этот скрипт в качестве параметра, но я не могу заставить синтаксис работать. Скриптовый блок преобразуется в строку где-то вдоль пути.
Он отлично работает, когда я передаю блок script в локальную функцию, но не через start-job
Работает следующий синтаксис:
function LocalFunction
{
param (
[parameter(Mandatory=$true)]
[ScriptBlock]$ScriptBlock
)
&$ScriptBlock | % { echo "got $_" }
}
LocalFunction -ScriptBlock { echo "hello" }
Этот результат "получил привет", как ожидалось.
Но выполняется следующее:
$job = start-job -argumentlist { echo "hello" } -scriptblock {
param (
[parameter(Mandatory=$true)]
[ScriptBlock]$ScriptBlock
)
&$ScriptBlock | % { echo "got $_" }
}
start-sleep -s 1
receive-job $job
Возвращаемая ошибка:
Receive-Job : Cannot process argument transformation on parameter 'ScriptBlock'. Cannot convert the " echo "hello" " value of type "System.String" to type "System.Management.Automation.ScriptBlock".
Итак, если я правильно читаю ошибку, похоже, что -argumentlist каким-то образом заставляет свои аргументы в строки.
Любые мастера PowerShell знают, как заставить этот синтаксис работать?
Спасибо заранее,
Бен