Wait-Job
Wartet, bis sich einer oder alle in der Sitzung ausgeführten PowerShell Jobs in einem beendenden Status befinden.
Syntax
SessionIdParameterSet (Standardwert)
Wait-Job
[-Id] <Int32[]>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
JobParameterSet
Wait-Job
[-Job] <Job[]>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
NameParameterSet
Wait-Job
[-Name] <String[]>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
InstanceIdParameterSet
Wait-Job
[-InstanceId] <Guid[]>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
StateParameterSet
Wait-Job
[-State] <JobState>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
FilterParameterSet
Wait-Job
[-Filter] <Hashtable>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
Beschreibung
Das Cmdlet Wait-Job
wartet, bis ein Prozess in einem abschließenden Zustand ist, bevor die Ausführung fortgesetzt wird.
Die Endzustände sind:
- Abgeschlossen
- gescheitert
- Angehalten
- Suspendiert
- Getrennt
Sie können warten, bis sich ein bestimmter Job oder alle Jobs in einem beendenden Status befinden. Sie können auch eine maximale Wartezeit für den Auftrag mithilfe des Timeout--Parameters festlegen oder den Parameter Force verwenden, um auf einen Auftrag im Suspended
- oder Disconnected
-Status zu warten.
Wenn die Befehle im Auftrag abgeschlossen sind, gibt Wait-Job
ein Auftragsobjekt zurück und setzt die Ausführung fort.
Sie können das Cmdlet Wait-Job
verwenden, um auf Aufträge zu warten, die mit dem Cmdlet Start-Job
oder dem Parameter AsJob des Cmdlets Invoke-Command
gestartet wurden. Weitere Informationen zu Aufträgen finden Sie unter Informationen zu Aufträgen.
Ab Windows PowerShell 3.0 wartet das cmdlet Wait-Job
auch auf benutzerdefinierte Auftragstypen, z. B. Workflowaufträge und Instanzen geplanter Aufträge. Damit Wait-Job
auf Aufträge eines bestimmten Typs warten können, importieren Sie das Modul, das den benutzerdefinierten Auftragstyp unterstützt, in die Sitzung, bevor Sie das cmdlet Get-Job
ausführen, entweder mithilfe des Cmdlets Import-Module
oder mithilfe oder Abrufen eines Cmdlets im Modul. Informationen zu einem bestimmten benutzerdefinierten Auftragstyp finden Sie in der Dokumentation des Features für den benutzerdefinierten Auftragstyp.
Beispiele
Beispiel 1: Auf alle Aufträge warten
Get-Job | Wait-Job
Dieser Befehl wartet darauf, dass alle in der Sitzung ausgeführten Aufträge beendet werden.
Beispiel 2: Warten auf Aufträge, die auf Remotecomputern gestartet wurden, mithilfe von Start-Job
$s = New-PSSession Server01, Server02, Server03
Invoke-Command -Session $s -ScriptBlock {Start-Job -Name Date1 -ScriptBlock {Get-Date}}
$done = Invoke-Command -Session $s -Command {Wait-Job -Name Date1}
$done.Count
3
In diesem Beispiel wird gezeigt, wie Sie das cmdlet Wait-Job
mit Aufträgen verwenden, die auf Remotecomputern mithilfe des Cmdlets Start-Job
gestartet wurden. Befehle Start-Job
und Wait-Job
werden mithilfe des cmdlets Invoke-Command
an den Remotecomputer übermittelt.
In diesem Beispiel wird Wait-Job
verwendet, um zu bestimmen, ob ein Get-Date
Befehl, der als Auftrag auf drei verschiedenen Computern ausgeführt wird, abgeschlossen ist.
Der erste Befehl erstellt eine Windows PowerShell-Sitzung (PSSession) auf jedem der drei Remotecomputer und speichert sie in der $s
Variablen.
Der zweite Befehl verwendet Invoke-Command
, um Start-Job
in jeder der drei Sitzungen in $s
auszuführen.
Alle Jobs haben den Namen Date1.
Der dritte Befehl verwendet Invoke-Command
, um Wait-Job
auszuführen. Dieser Befehl wartet darauf, dass die Date1
Jobs auf jedem Computer beendet werden. Sie speichert die resultierende Auflistung (Array) von Job Objekten in die $done
Variable.
Der vierte Befehl verwendet die eigenschaft Count des Arrays von Auftragsobjekten in der variablen $done
, um zu bestimmen, wie viele der Aufträge abgeschlossen sind.
Beispiel 3: Ermitteln, wann der erste Auftrag abgeschlossen ist
$s = New-PSSession -ComputerName (Get-Content -Path .\Machines.txt)
$c = 'Get-EventLog -LogName System | Where-Object {$PSItem.EntryType -eq "error" --and $PSItem.Source -eq "LSASRV"} | Out-File -FilePath Errors.txt'
Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {$Using:c}
Invoke-Command -Session $s -ScriptBlock {Wait-Job -Any}
In diesem Beispiel wird der Parameter Any von Wait-Job
verwendet, um festzustellen, wann der erste von vielen Jobs, die in der aktuellen Sitzung ausgeführt werden, sich in einem terminierenden Status befindet. Außerdem wird gezeigt, wie Sie mit dem Cmdlet Wait-Job
warten, bis Remoteaufträge abgeschlossen sind.
Der erste Befehl erstellt eine PSSession- auf jedem der in der Machines.txt Datei aufgeführten Computer und speichert die PSSession- Objekte in der variablen $s
. Der Befehl verwendet das Cmdlet Get-Content
, um den Inhalt der Datei abzurufen. Der Befehl Get-Content
wird in Klammern eingeschlossen, um sicherzustellen, dass er vor dem Befehl New-PSSession
ausgeführt wird.
Der zweite Befehl speichert eine Get-EventLog
Befehlszeichenfolge in Anführungszeichen in der variablen $c
.
Der dritte Befehl verwendet Invoke-Command
Cmdlet, um Start-Job
in den einzelnen Sitzungen in $s
auszuführen.
Der Befehl Start-Job
startet einen Auftrag, der den Befehl Get-EventLog
in der variablen $c
ausführt.
Der Befehl verwendet den Using:
Bereichsmodifizierer, um anzugeben, dass die $c
Variable auf dem lokalen Computer definiert wurde. Der Using:
Bereichsmodifizierer wird in Windows PowerShell 3.0 eingeführt. Weitere Informationen zum Using:
Bereichsmodifizierer finden Sie unter about_Remote_Variables.
Der vierte Befehl verwendet "Invoke-Command
", um einen "Wait-Job
" Befehl in den Sitzungen auszuführen. Er verwendet den Parameter Any, um zu warten, bis der erste Job auf den Remote-Computern den Status terminating hat.
Beispiel 4: Festlegen einer Wartezeit für Aufträge auf Remotecomputern
PS> $s = New-PSSession -ComputerName Server01, Server02, Server03
PS> $jobs = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {Get-Date}}
PS> $done = Invoke-Command -Session $s -ScriptBlock {Wait-Job -Timeout 30}
PS>
In diesem Beispiel wird gezeigt, wie Sie den Timeout Parameter von Wait-Job
verwenden, um eine maximale Wartezeit für die Aufträge festzulegen, die auf Remotecomputern ausgeführt werden.
Der erste Befehl erstellt eine PSSession- auf jedem der drei Remotecomputer (Server01, Server02 und Server03) und speichert dann die PSSession- Objekte in der $s
Variablen.
Der zweite Befehl verwendet Invoke-Command
, um Start-Job
in jedem der PSSession- Objekte in $s
auszuführen. Es speichert die resultierenden Auftragsobjekte in der $jobs
Variablen.
Der dritte Befehl verwendet Invoke-Command
, um Wait-Job
in jeder Sitzung in $s
auszuführen. Der Befehl Wait-Job
bestimmt, ob alle Befehle innerhalb von 30 Sekunden abgeschlossen wurden. Er verwendet den Timeout--Parameter mit dem Wert 30, um die maximale Wartezeit festzulegen, und speichert dann die Ergebnisse des Befehls in der $done
Variablen.
In diesem Fall ist nach 30 Sekunden nur der Befehl auf dem Server02-Computer abgeschlossen.
Wait-Job
beendet die Wartezeit, gibt das Objekt zurück, das den abgeschlossenen Auftrag darstellt, und zeigt die Eingabeaufforderung an.
Die variable $done
enthält ein Auftragsobjekt, das den Auftrag darstellt, der auf Server02 ausgeführt wurde.
Beispiel 5: Warten, bis einer von mehreren Aufträgen abgeschlossen ist
Wait-Job -Id 1, 2, 5 -Any
Mit diesem Befehl werden drei Aufträge anhand ihrer IDs identifiziert und gewartet, bis sich eins dieser Aufträge in einem Beendigungszustand befindet. Die Ausführung wird fortgesetzt, wenn der erste Auftrag abgeschlossen ist.
Beispiel 6: Warten Sie auf einen Zeitraum, und lassen Sie dann zu, dass der Auftrag im Hintergrund fortgesetzt wird.
Wait-Job -Name "DailyLog" -Timeout 120
Dieser Befehl wartet 120 Sekunden (zwei Minuten), bis der DailyLog-Auftrag abgeschlossen ist. Wenn der Auftrag in den nächsten zwei Minuten nicht abgeschlossen wird, wird die Ausführung fortgesetzt, und der Auftrag wird weiterhin im Hintergrund ausgeführt.
Beispiel 7: Warten auf einen Job nach Name
Wait-Job -Name "Job3"
Dieser Befehl verwendet den Auftragsnamen, um den Auftrag zu identifizieren, für den gewartet werden soll.
Beispiel 8: Warten auf Aufträge auf dem lokalen Computer, die mit Start-Job gestartet wurden
$j = Start-Job -ScriptBlock {Get-ChildItem -Filter *.ps1 | Where-Object {$PSItem.LastWriteTime -gt ((Get-Date) - (New-TimeSpan -Days 7))}}
$j | Wait-Job
In diesem Beispiel wird gezeigt, wie Sie das Cmdlet Wait-Job
mit Aufträgen verwenden, die mit Start-Job
auf dem lokalen Computer gestartet wurden.
Diese Befehle starten einen Auftrag, der die Windows PowerShell-Skriptdateien abruft, die in der letzten Woche hinzugefügt oder aktualisiert wurden.
Der erste Befehl verwendet Start-Job
, um einen Auftrag auf dem lokalen Computer zu starten. Der Auftrag führt einen Get-ChildItem
Befehl aus, der alle Dateien mit einer .ps1
Dateinamenerweiterung abruft, die in der letzten Woche hinzugefügt oder aktualisiert wurden.
Der dritte Befehl verwendet Wait-Job
, um zu warten, bis sich der Job in einem Terminierungsstatus befindet. Nach Abschluss des Auftrags zeigt der Befehl das Auftragsobjekt an, das Informationen zum Auftrag enthält.
Beispiel 9: Warten auf Aufträge, die auf Remotecomputern gestartet wurden, mithilfe von Invoke-Command
$s = New-PSSession -ComputerName Server01, Server02, Server03
$j = Invoke-Command -Session $s -ScriptBlock {Get-Process} -AsJob
$j | Wait-Job
In diesem Beispiel wird gezeigt, wie Sie Wait-Job
mit Aufträgen verwenden, die auf Remotecomputern gestartet wurden, indem Sie den Parameter AsJob von Invoke-Command
verwenden. Wenn Sie AsJobverwenden, wird der Auftrag auf dem lokalen Computer erstellt, und die Ergebnisse werden automatisch an den lokalen Computer zurückgegeben, obwohl der Auftrag auf den Remotecomputern ausgeführt wird.
In diesem Beispiel wird Wait-Job
verwendet, um zu bestimmen, ob ein Get-Process
Befehl, der in den Sitzungen auf drei Remotecomputern ausgeführt wird, in einem Beendigungszustand liegt.
Der erste Befehl erstellt PSSession- Objekte auf drei Computern und speichert sie in der $s
Variablen.
Der zweite Befehl verwendet Invoke-Command
, um Get-Process
in jeder der drei Sitzungen in $s
auszuführen.
Der Befehl verwendet den AsJob Parameter, um den Befehl asynchron als Auftrag auszuführen. Der Befehl gibt ein Auftragsobjekt zurück, genau wie die Aufträge, die mit Start-Job
gestartet wurden, und das Auftragsobjekt wird in der variablen $j
gespeichert.
Der dritte Befehl verwendet einen Pipelineoperator (|
), um das Auftragsobjekt in $j
an das Cmdlet Wait-Job
zu senden. In diesem Fall ist kein Invoke-Command
-Befehl erforderlich, da sich der Auftrag auf dem lokalen Computer befindet.
Beispiel 10: Warten auf einen Auftrag mit einer ID (Kennung)
Get-Job
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 Job1 Completed True localhost,Server01.. Get-Service
4 Job4 Completed True localhost dir | where
Wait-Job -Id 1
Dieser Befehl wartet auf den Auftrag mit dem ID-Wert 1.
Parameter
-Any
Gibt an, dass dieses Cmdlet das Auftragsobjekt zurückgibt und die Ausführung fortsetzt, wenn ein Auftrag abgeschlossen ist. Standardmäßig wartet Wait-Job
, bis alle angegebenen Aufträge abgeschlossen sind, bevor die Eingabeaufforderung angezeigt wird.
Parametereigenschaften
Typ: | SwitchParameter |
Standardwert: | None |
Unterstützt Platzhalter: | False |
Nicht anzeigen: | False |
Parametersätze
(All)
Position: | Named |
Obligatorisch.: | False |
Wert aus Pipeline: | False |
Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
Wert aus verbleibenden Argumenten: | False |
-Filter
Gibt eine Hashtabelle mit Bedingungen an. Dieses Cmdlet wartet auf Aufträge, die alle Bedingungen in der Hashtabelle erfüllen. Geben Sie eine Hashtabelle ein, in der die Schlüssel Auftragseigenschaften und die Werte Werte der Auftragseigenschaften sind.
Dieser Parameter funktioniert nur für benutzerdefinierte Auftragstypen, z. B. Workflowaufträge und geplante Aufträge. Es funktioniert nicht bei Standardaufträgen, z. B. bei denen, die mit dem Cmdlet Start-Job
erstellt wurden. Informationen zur Unterstützung für diesen Parameter finden Sie im Hilfethema für den Auftragstyp.
Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.
Parametereigenschaften
Typ: | Hashtable |
Standardwert: | None |
Unterstützt Platzhalter: | False |
Nicht anzeigen: | False |
Parametersätze
FilterParameterSet
Position: | 0 |
Obligatorisch.: | True |
Wert aus Pipeline: | False |
Wert aus Pipeline nach dem Eigenschaftsnamen: | True |
Wert aus verbleibenden Argumenten: | False |
-Force
Gibt an, dass dieses Cmdlet weiterhin auf Jobs wartet, die sich im Status Suspended oder Disconnected befinden. Standardmäßig kehrt Wait-Job
zurück oder beendet das Warten, wenn sich Jobs in einem der folgenden Status befinden:
- Abgeschlossen
- gescheitert
- Angehalten
- Suspendiert
- Getrennt
Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.
Parametereigenschaften
Typ: | SwitchParameter |
Standardwert: | None |
Unterstützt Platzhalter: | False |
Nicht anzeigen: | False |
Parametersätze
(All)
Position: | Named |
Obligatorisch.: | False |
Wert aus Pipeline: | False |
Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
Wert aus verbleibenden Argumenten: | False |
-Id
Gibt ein Array von IDs von Aufträgen an, für die dieses Cmdlet wartet.
Die ID ist eine ganze Zahl, die den Job in der aktuellen Sitzung eindeutig identifiziert. Es ist einfacher zu merken und einzugeben als die Instanz-ID, aber sie ist nur in der aktuellen Sitzung eindeutig. Sie können eine oder mehrere IDs eingeben, getrennt durch Kommas. Geben Sie Get-Job
ein, um die ID eines Auftrags zu finden.
Parametereigenschaften
Typ: | Int32[] |
Standardwert: | None |
Unterstützt Platzhalter: | False |
Nicht anzeigen: | False |
Parametersätze
SessionIdParameterSet
Position: | 0 |
Obligatorisch.: | True |
Wert aus Pipeline: | False |
Wert aus Pipeline nach dem Eigenschaftsnamen: | True |
Wert aus verbleibenden Argumenten: | False |
-InstanceId
Gibt ein Array von Instanz-IDs von Aufträgen an, für die dieses Cmdlet wartet. Die Standardeinstellung ist "alle Aufträge".
Eine Instanz-ID ist eine GUID, die den Auftrag auf dem Computer eindeutig identifiziert. Um die Instanz-ID eines Auftrags zu finden, verwenden Sie Get-Job
.
Parametereigenschaften
Typ: | Guid[] |
Standardwert: | None |
Unterstützt Platzhalter: | False |
Nicht anzeigen: | False |
Parametersätze
InstanceIdParameterSet
Position: | 0 |
Obligatorisch.: | True |
Wert aus Pipeline: | False |
Wert aus Pipeline nach dem Eigenschaftsnamen: | True |
Wert aus verbleibenden Argumenten: | False |
-Job
Gibt die Aufträge an, für die dieses Cmdlet wartet. Geben Sie eine Variable ein, die Auftragsobjekte bzw. einen Befehl enthält, der die Auftragsobjekte abruft. Sie können auch einen Pipelineoperator verwenden, um Auftragsobjekte an das Cmdlet Wait-Job
zu senden. Standardmäßig wartet Wait-Job
auf alle Aufträge, die in der aktuellen Sitzung erstellt wurden.
Parametereigenschaften
Typ: | Job[] |
Standardwert: | None |
Unterstützt Platzhalter: | False |
Nicht anzeigen: | False |
Parametersätze
JobParameterSet
Position: | 0 |
Obligatorisch.: | True |
Wert aus Pipeline: | True |
Wert aus Pipeline nach dem Eigenschaftsnamen: | True |
Wert aus verbleibenden Argumenten: | False |
-Name
Gibt benutzerfreundliche Namen von Aufträgen an, auf die dieses Cmdlet wartet.
Parametereigenschaften
Typ: | String[] |
Standardwert: | None |
Unterstützt Platzhalter: | False |
Nicht anzeigen: | False |
Parametersätze
NameParameterSet
Position: | 0 |
Obligatorisch.: | True |
Wert aus Pipeline: | False |
Wert aus Pipeline nach dem Eigenschaftsnamen: | True |
Wert aus verbleibenden Argumenten: | False |
-State
Gibt einen Jobstatus an. Dieses Cmdlet wartet nur auf Jobs, die sich im angegebenen Status befinden. Die zulässigen Werte für diesen Parameter sind:
- Nicht gestartet
- Laufen
- Abgeschlossen
- gescheitert
- Angehalten
- Gesperrt
- Suspendiert
- Getrennt
- Anhalten
- Anhalten
Weitere Informationen über den Status von Jobs finden Sie unter JobState Auflistung.
Parametereigenschaften
Typ: | JobState |
Standardwert: | None |
Zulässige Werte: | NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint |
Unterstützt Platzhalter: | False |
Nicht anzeigen: | False |
Parametersätze
StateParameterSet
Position: | 0 |
Obligatorisch.: | True |
Wert aus Pipeline: | False |
Wert aus Pipeline nach dem Eigenschaftsnamen: | True |
Wert aus verbleibenden Argumenten: | False |
-Timeout
Gibt die maximale Wartezeit für jeden Auftrag in Sekunden an. Der Standardwert -1 gibt an, dass das Cmdlet wartet, bis der Auftrag abgeschlossen ist. Die Zeitmessung beginnt, wenn Sie den Befehl Wait-Job
übermitteln, nicht den Befehl Start-Job
.
Wenn diese Zeit überschritten wird, wird die Wartezeit beendet und die Ausführung fortgesetzt, auch wenn der Auftrag noch ausgeführt wird. Der Befehl zeigt keine Fehlermeldung an.
Parametereigenschaften
Typ: | Int32 |
Standardwert: | None |
Unterstützt Platzhalter: | False |
Nicht anzeigen: | False |
Aliase: | TimeoutSec |
Parametersätze
(All)
Position: | Named |
Obligatorisch.: | False |
Wert aus Pipeline: | False |
Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
Wert aus verbleibenden Argumenten: | False |
CommonParameters
Dieses Cmdlet unterstützt die allgemeinen Parameter -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction und -WarningVariable. Weitere Informationen findest du unter about_CommonParameters.
Eingaben
System.Management.Automation.RemotingJob
Sie können ein Auftragsobjekt an dieses Cmdlet weiterleiten.
Ausgaben
System.Management.Automation.PSRemotingJob
Dieses Cmdlet gibt Auftragsobjekte zurück, die die Aufträge in einem Beendigungszustand darstellen. Wenn die Wartezeit endet, weil der Wert des Timeout Parameter überschritten wird, gibt Wait-Job
keine Objekte zurück.
Hinweise
PowerShell enthält die folgenden Aliase für Wait-Job
:
- Alle Plattformen:
wjb
Standardmäßig kehrt Wait-Job
zurück oder beendet das Warten, wenn sich Jobs in einem der folgenden Status befinden:
- Abgeschlossen
- gescheitert
- Angehalten
- Suspendiert
- Getrennt
Um Wait-Job
anzuweisen, weiterhin auf angehaltene und unterbrochene Jobs zu warten, verwenden Sie den Parameter Force.