Как передать скрипт-блок как один из параметров в start-job
Я пытаюсь создать фоновое задание, которое выполняет блок скриптов. Мне нужно передать этот блок скриптов в качестве параметра, но я не могу заставить работать синтаксис. Сценарий преобразуется в строку где-то по пути.
Он отлично работает, когда я передаю блок скрипта локальной функции, но не через 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 знает, как заставить этот синтаксис работать?
Заранее спасибо,
Бен