Я пытаюсь создать фоновое задание, которое выполняет блок сценария. Мне нужно передать этот блок сценария в качестве параметра, но я не могу заставить работать синтаксис. Где-то по пути блок сценария преобразуется в строку.
Он отлично работает, когда я передаю блок скрипта в локальную функцию, но не через 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".
Так что, если я правильно понимаю ошибку, кажется, что -argumentslist каким-то образом заставляет свои аргументы быть строками.
Любые гуру powershell знают, как заставить этот синтаксис работать?
Заранее спасибо,
Бен