Как передать скриптовый блок в качестве одного из параметров в 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".

Так что, если я правильно понимаю ошибку, кажется, что -argumentslist каким-то образом заставляет свои аргументы быть строками.

Любые гуру powershell знают, как заставить этот синтаксис работать?

Заранее спасибо,

Бен

16
задан ben 7 August 2012 в 10:54
поделиться