Comment passer un scriptblock comme l'un des paramètres de start-job

Je suis en train de créer une tâche en arrière-plan, qui exécute un scriptblock. J'ai besoin de passer cette scriptblock comme un paramètre, mais je n'arrive pas à obtenir la syntaxe de travail. Le scriptblock est converti en une chaîne de caractères quelque part le long du chemin.

Il fonctionne très bien lorsque je passe le bloc de script à une fonction locale, mais pas de la start-job

La syntaxe suivante fonctionne:

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

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

LocalFunction -ScriptBlock { echo "hello" }

Ce sorties "got bonjour" comme prévu.

Mais la suivante échoue:

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

L'erreur, il renvoie est

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

Donc, si je suis en train de lire l'erreur de droit, il semble que -argumentlist est de forcer en quelque sorte à ses arguments dans les chaînes.

Powershell gourous de savoir comment faire cette syntaxe travail?

Merci d'avance,

Ben

source d'informationauteur ben