2014-02-10 13 views
5

Ich habe ein Powershell-Skript, wo ich eine Funktion namens generate_html aufrufen.Powershell: Warten Sie nicht auf Funktion zurück

Gibt es eine Möglichkeit, die Funktion aufzurufen und nicht auf ihre Rückkehr zu warten, bevor mit dem nächsten Funktionsaufruf fortgefahren wird?

Ich würde es nicht vorziehen müssen, es in mehrere Skripte zu brechen und diese Skripte zur gleichen Zeit laufen zu lassen.

function generate_html($var) 
{ 
... 
} 

generate_html team1 
generate_html team2 
+2

Look: 'get-help about_jobs' – arco444

Antwort

8

Sie können eine Methode als asynchronen Job starten, das Start-Job Cmdlets.

Also, würden Sie so etwas tun:

function generate_html($var) 
{ 
#snipped 
} 

Start-Job -ScriptBlock { generate_html team1 } 

Wenn Sie überwachen müssen, wenn der Auftrag abgeschlossen ist, entweder speichern Sie die Ausgabe von Start-Job oder Get-Job verwenden, um alle Arbeitsplätze zu erhalten begann in der aktuellen Sitzung, ziehen Sie die gewünschte heraus. Sobald Sie das haben, überprüfen Sie die State Eigenschaft, um zu sehen, ob der Wert Finished ist

EDIT: Eigentlich mein Fehler, der Job in einem anderen Thread sein, so Funktionen definiert oder nicht verfügbar (nicht in einem Modul das Powershell weiß) in dem Thread, von dem Sie Ihren Job starten, sind nicht verfügbar.

Versuchen Sie, Ihre Funktion als Skript erklärt: bei Verwendung von Jobs

$generateHtml = { 
    param($var) 
    #snipped 
} 

Start-Job -ScriptBlock $generateHtml -ArgumentList team1 
Start-Job -ScriptBlock $generateHtml -ArgumentList team2 
+2

Beachten Sie die' -Keep' Flagge auf dem Empfangsauftrag kann die automatische Löschung von Ergebnissen verhindern, nachdem Empfang. 'receive-job-name MyJob -Keep' Für den Fall, dass dies für jeden Leser ein Problem wird. –

+0

Ich erhalte den folgenden Fehler: Der Begriff 'generate_html' wird nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. – kernelpanic

Verwandte Themen