THEMA about_Job_Details KURZBESCHREIBUNG Enthält Details zu Hintergrundaufträgen auf lokalen und Remotecomputern. AUSFÜHRLICHE BESCHREIBUNG In diesem Thema wird der Begriff des Hintergrundauftrags erläutert, und es werden technische Informationen zur Funktionsweise von Hintergrundaufträgen in Windows PowerShell gegeben. Dieses Thema ergänzt die Themen "about_Jobs" und "about_Remote_Jobs". Wichtig: Für Hintergrundaufträge, die mit Start-Job oder dem AsJob-Parameter von Invoke-Command gestartet werden, ist die Windows PowerShell-Remotinginfrastruktur erforderlich. Diese Features können Sie nur verwenden, wenn Windows PowerShell für Remoting konfiguriert wurde. Dies gilt auch dann, wenn der Hintergrundauftrag lediglich auf dem lokalen Computer ausgeführt wird. Weitere Informationen finden Sie unter "about_Remote_Requirements". INFORMATIONEN ZU HINTERGRUNDAUFTRÄGEN Bei einem Hintergrundauftrag wird ein Befehl oder ein Ausdruck asynchron ausgeführt. Dabei kann ein Cmdlet, eine Funktion, ein Skript oder eine beliebige andere befehlsbasierte Aufgabe ausgeführt werden. Hintergrundaufträge sind für Befehle vorgesehen, für deren Ausführung ein längerer Zeitraum erforderlich ist, doch können Sie jeden Befehl im Hintergrund ausführen. Beim Ausführen eines synchronen Befehls wird die Windows PowerShell- Eingabeaufforderung unterdrückt, bis der Befehl vollständig ist. Bei einem Hintergrundauftrag wird die Windows PowerShell-Eingabeaufforderung jedoch nicht unterdrückt. Befehle zum Starten eines Hintergrundauftrags geben ein Auftragsobjekt zurück. Die Eingabeaufforderung kann sofort wieder verwendet werden, sodass Sie an anderen Aufgaben arbeiten können, während der Hintergrundauftrag ausgeführt wird. Wenn Sie jedoch einen Hintergrundauftrag starten, erhalten Sie die Ergebnisse nicht sofort, auch dann nicht, wenn der Auftrag sehr schnell ausgeführt wird. Das zurückgegebene Auftragsobjekt enthält nützliche Informationen zum Auftrag, jedoch nicht die Auftragsergebnisse. Um die Auftragsergebnisse abzurufen, müssen Sie einen separaten Befehl ausführen. Sie können auch Befehle ausführen, um den Auftrag zu beenden, auf den Abschluss des Auftrags zu warten oder den Auftrag zu löschen. Wenn Sie die zeitliche Steuerung eines Hintergrundauftrags unabhängig von anderen Befehlen machen möchten, können Sie jeden Hintergrundauftrag in einer eigenen Windows PowerShell-Umgebung ("Sitzung") ausführen. Dabei kann es sich um eine temporäre Verbindung handeln, die nur zum Ausführen des Auftrags erstellt und anschließend zerstört wird, oder auch um eine permanente Sitzung (PSSession), mit der Sie mehrere zusammengehörige Aufträge oder Befehle ausführen können. VERWENDEN DER JOB-CMDLETS Verwenden Sie den Befehl "Start-Job", um einen Hintergrundauftrag mit einem lokalen Computer zu starten. Start-Job gibt ein Auftragsobjekt zurück. Mit dem Cmdlet "Get-Job" können Sie auch Objekte abrufen, die die auf dem lokalen Computer gestarteten Aufträge darstellen. Zum Abrufen der Auftragsergebnisse verwenden Sie den Befehl "Receive-Job". Wenn der Auftrag nicht vollständig ist, gibt Receive-Job Teilergebnisse zurück. Mit dem Cmdlet "Wait-Job" können Sie die Eingabeaufforderung unterdrücken, bis einer oder alle Aufträge, die in der Sitzung gestartet wurden, abgeschlossen wurden. Zum Beenden eines Hintergrundauftrags verwenden Sie das Cmdlet "Stop-Job". Zum Löschen eines Auftrags verwenden Sie das Cmdlet "Remove-Job". Weitere Informationen zur Funktionsweise der Cmdlets finden Sie in den Hilfethemen zu den einzelnen Cmdlets und unter "about_Jobs". STARTEN VON HINTERGRUNDAUFTRÄGEN AUF REMOTECOMPUTERN Sie können Hintergrundaufträge auf einem lokalen Computer oder einem Remotecomputer erstellen und verwalten. Wenn Sie einen Hintergrundauft rag remote ausführen möchten, verwenden Sie den AsJob-Parameter eines Cmdlets, z. B. Invoke-Command, oder verwenden Sie das Cmdlet "Invoke-Command", um den Befehl "Start-Job" remote auszuführen. Sie können einen Hintergrundauftrag auch in einer interaktiven Sitzung starten. Weitere Informationen zu Remotehintergrundaufträgen finden Sie unter "about_Remote_Jobs". UNTERGEORDNETE AUFTRÄGE Jeder Hintergrundauftrag besteht aus einem übergeordneten Auftrag und einem oder mehreren untergeordneten Aufträgen. Bei mit Start-Job oder dem AsJob-Parameter von Invoke-Command gestarteten Aufträgen wird der übergeordnete Auftrag direkt ausgeführt. Von diesem werden keine Befehle ausgeführt oder Ergebnisse zurückgegeben. Die Befehle werden von den untergeordneten Aufträgen ausgeführt. (Die Funktionsweise von mit anderen Cmdlets gestarteten Aufträgen kann hiervon abweichen.) Die untergeordneten Aufträge werden in der ChildJobs-Eigenschaft des übergeordneten Auftragsobjekts gespeichert. Die ChildJobs-Eigenschaft kann ein oder viele untergeordnete Auftragsobjekte enthalten. Die untergeordneten Auftragsobjekte besitzen einen Namen, eine ID und eine Instanz-ID, die sich von denen des übergeordneten Auftrags unterscheiden, sodass Sie die übergeordneten und untergeordneten Aufträge einzeln oder als Einheit verwalten können. Zum Anzeigen der übergeordneten und untergeordneten Aufträge in einem Auftrag rufen Sie mit dem Cmdlet "Get-Job" den übergeordneten Auftrag ab, und übergeben Sie dann den Auftrag über die Pipeline an den Befehl "Format-List", mit dem die Name-Eigenschaft und die ChildJobs-Eigenschaft der Objekte anzeigt werden, wie im folgenden Befehl veranschaulicht. C:\PS> get-job | format-list -property Name, ChildJobs Name : Job1 ChildJobs : {Job2} Sie können für den untergeordneten Auftrag auch den Befehl "Get-Job" ausführen, wie im folgenden Befehl gezeigt: C:\PS> get-job job2 Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 2 Job2 Completed True localhost get-process Die Konfiguration des untergeordneten Auftrags hängt von dem Befehl ab, mit dem Sie den Auftrag gestartet haben. -- Wenn Sie einen Auftrag auf einem lokalen Computer mit Start-Job starten, besteht der Auftrag aus einem übergeordneten Ausführungsauftrag und einem untergeordneten Auftrag, von dem der Befehl ausgeführt wird. -- Wenn Sie einen Auftrag auf einem oder mehreren Computern mit dem AsJob-Parameter von Invoke-Command starten, besteht der Auftrag aus einem übergeordneten Ausführungsauftrag und jeweils einem untergeordneten Auftrag pro Auftrag und Computer. -- Wenn Sie den Befehl "Start-Job" mit "Invoke-Command" auf einem oder mehreren Remotecomputern ausführen, ist das Ergebnis mit dem eines lokal auf den einzelnen Remotecomputern ausgeführten Befehls identisch. Der Befehl gibt ein Auftragsobjekt für jeden Computer zurück. Das Auftragsobjekt aus einem übergeordneten Ausführungsauftrag und einem untergeordneten Auftrag, von dem der Befehl ausgeführt wird. Der übergeordnete Auftrag stellt alle untergeordneten Aufträge dar. Wenn Sie einen übergeordneten Auftrag verwalten, gelten Ihre Aktionen auch für die zugehörigen untergeordneten Aufträge. Wenn Sie z. B. einen übergeordneten Auftrag beenden, werden alle untergeordneten Aufträge ebenfalls beendet. Wenn Sie die Ergebnisse eines übergeordneten Auftrags abrufen, rufen Sie auch die Ergebnisse aller untergeordneten Aufträge ab. Sie können untergeordnete Aufträge jedoch auch einzeln verwalten. Dies ist besonders sinnvoll, wenn Sie ein Problem bei einem Auftrag untersuchen oder die Ergebnisse nur eines von mehreren untergeordneten Aufträgen abrufen möchten, die mit dem AsJob-Parameter von Invoke-Command gestartet wurden. (Das Graviszeichen [`] wird als Fortsetzungszeichen verwendet.) Im folgenden Befehl wird der AsJob-Parameter von Invoke-Command zum Starten von Hintergrundaufträgen auf dem lokalen Computer und zwei Remotecomputern verwendet. Mit dem Befehl wird der Auftrag in der Variablen "$j" gespeichert. C:\PS> $j = invoke-command -computername localhost, Server01, Server02 ` -command {get-date} -AsJob Wenn Sie die Name-Eigenschaft und die ChildJob-Eigenschaft des Auftrags in $j anzeigen, wird angezeigt, dass der Befehl ein Auftragsobjekt mit drei untergeordneten Aufträgen, einem pro Computer, zurückgegeben hat. C:\PS> $j | format-list name, childjobs Name : Job3 ChildJobs : {Job4, Job5, Job6} Wenn Sie den übergeordneten Auftrag anzeigen, werden für den Auftrag Fehler angezeigt. C:\PS> $j Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 1 Job3 Failed True localhost,server... get-date Wenn Sie jedoch für jeden untergeordneten Auftrag den Befehl "Get-Job" ausführen, werden nur für einen Fehler angezeigt. PS C:\ps-test> get-job job4, job5, job6 Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 4 Job4 Completed True localhost get-date 5 Job5 Failed False Server01 get-date 6 Job6 Completed True Server02 get-date Wenn Sie die Ergebnisse aller untergeordneten Aufträge abrufen möchten, können Sie die Ergebnisse des übergeordneten Auftrags mit dem Cmdlet "Receive-Job" abrufen. Sie können jedoch auch die Ergebnisse eines bestimmten untergeordneten Auftrags abrufen, wie im folgenden Befehl gezeigt. C:\PS> receive-job -job6 -keep | format-table ComputerName, DateTime -auto ComputerName DateTime ------------ -------- Server02 Donnerstag, 13. März 2008 16:16:03 Uhr Das Feature für untergeordnete Aufträge von Windows PowerShell-Hintergrundaufträgen bietet Ihnen größere Kontrolle über die von Ihnen ausgeführten Aufträge. SIEHE AUCH about_Jobs about_Remote_Jobs about_Remote Invoke-Command Start-Job Get-Job Wait-Job Stop-Job Remove-Job New-PSSession Enter-PSSession Exit-PSSession