Jak przekazać blok skryptów jako jeden z parametrów zadania początkowego

Próbuję utworzyć zadanie w tle, które wykonuje blok skryptów. Muszę przekazać ten skrypt jako parametr, ale wydaje mi się, że nie działa poprawnie składnia. Blok skryptowy jest konwertowany na ciąg znaków gdzieś po drodze.

Działa dobrze, gdy przekazuję blok skryptu do funkcji lokalnej, ale nie przez zadanie początkowe

Działa następująca składnia:

function LocalFunction
{
    param (
        [parameter(Mandatory=$true)]
        [ScriptBlock]$ScriptBlock
    )

    &$ScriptBlock | % { echo "got $_" }
}

LocalFunction -ScriptBlock { echo "hello" }

Wyjścia „zostały przywitane” zgodnie z oczekiwaniami.

Ale następujące błędy:

$job = start-job -argumentlist { echo "hello" } -scriptblock {
    param (
        [parameter(Mandatory=$true)]
        [ScriptBlock]$ScriptBlock
    )
    &$ScriptBlock | % { echo "got $_" }
}
start-sleep -s 1
receive-job $job

Błąd, który zwraca

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".

Jeśli więc czytam błąd, wygląda na to, że -argumentlist w jakiś sposób wymusza swoje argumenty na łańcuchach.

Dowolni guru PowerShell wiedzą, jak wykonać tę składnię?

Z góry dziękuję,

Ben

questionAnswers(5)

yourAnswerToTheQuestion