Como faço para passar um scriptblock como um dos parâmetros no start-job

Eu estou tentando criar um trabalho em segundo plano, que executa um scriptblock. Eu preciso passar este scriptblock como um parâmetro, mas não consigo fazer a sintaxe funcionar. O scriptblock está sendo convertido em uma string em algum lugar ao longo do caminho.

Ele funciona bem quando eu passar o bloco de script para uma função local, mas não através de iniciar o trabalho

A seguinte sintaxe funciona:

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

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

LocalFunction -ScriptBlock { echo "hello" }

Isso gera "olá" como esperado.

Mas o seguinte falha:

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

O erro que ele retorna é

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

Então, se estou lendo o erro corretamente, parece que -argumentlist está de alguma forma forçando seus argumentos em strings.

Qualquer guru do PowerShell sabe como fazer essa sintaxe funcionar?

Desde já, obrigado,

Ben

questionAnswers(5)

yourAnswerToTheQuestion