¿Cómo paso un scriptblock como uno de los parámetros en start-job?

Estoy tratando de crear un trabajo en segundo plano, que ejecuta un bloque de script. Necesito pasar este bloque de secuencias de comandos como parámetro, pero parece que no consigo que la sintaxis funcione. El scriptblock se está convirtiendo en una cadena en algún lugar del camino.

Funciona bien cuando paso el bloque de script a una función local, pero no a través de start-job

La siguiente sintaxis funciona:

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

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

LocalFunction -ScriptBlock { echo "hello" }

Esto da como resultado "tengo hola" como se esperaba.

Pero lo siguiente falla:

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

El error que devuelve es

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

Entonces, si estoy leyendo correctamente el error, parece que -argumentlist de alguna manera está forzando sus argumentos en cadenas.

¿Alguno de los gurús de PowerShell sabe cómo hacer que esta sintaxis funcione?

Gracias por adelantado,

Ben

Respuestas a la pregunta(5)

Su respuesta a la pregunta