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