Wie gebe ich einen Skriptblock, der als einer der Parameter in der start-job

Ich versuche, erstellen Sie einen hintergrund-job, der führt einen Skriptblock. Ich brauche diesen scriptblock als ein parameter, aber ich kann nicht scheinen, um die syntax zu arbeiten. Der Skriptblock wird in einen string umgewandelt, irgendwo auf dem Weg.

Es funktioniert, wenn ich übergeben Sie das Skript blockieren, um eine lokale Funktion, aber nicht über start-job

Folgende syntax funktioniert:

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

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

LocalFunction -ScriptBlock { echo "hello" }

Diese Ausgänge "habe Hallo" als erwartet.

Aber der folgende Fehler auf:

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

Den Fehler, die zurückgegeben werden,

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

Also, wenn ich bin das Lesen der Fehler Recht, es scheint, dass -argumentlist ist irgendwie zwingen, seine Argumente in strings.

Jede powershell-gurus wissen, wie man diese syntax funktioniert?

Vielen Dank im Voraus,

Ben

Im, denen das gleiche Problem bei Verwendung psake. Ich erstellte eine Voraussetzung $prec = { ... } und ich habe versucht, diesen selben Voraussetzung für die verschiedenen Aufgaben. Ich bekomme den gleichen Fehler, die Sie haben. Lassen Sie mich wissen, wenn Sie eine Lösung finden..

InformationsquelleAutor ben | 2012-08-07

Schreibe einen Kommentar