Wait-Job
Wartet, bis sich einer oder alle in der Sitzung ausgeführten PowerShell-Aufträge in einem beendenden Zustand befinden.
Syntax
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Id] <Int32[]>
[<CommonParameters>]
Wait-Job
[-Job] <Job[]>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Name] <String[]>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-InstanceId] <Guid[]>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-State] <JobState>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Filter] <Hashtable>
[<CommonParameters>]
Beschreibung
Das Wait-Job
Cmdlet wartet, bis sich ein Auftrag in einem beendenden Zustand befindet, bevor die Ausführung fortgesetzt wird.
Die Beendigungszustände sind:
- Abgeschlossen
- Fehler
- Beendet
- Ausgesetzt
- Getrennt
Sie können warten, bis sich ein angegebener Auftrag oder alle Aufträge in einem beendeten Zustand befinden. Sie können auch eine maximale Wartezeit für den Auftrag mithilfe des Timeoutparameters festlegen oder den Force-Parameter verwenden, um auf einen Auftrag im Suspended
Status oder Disconnected
zu warten.
Wenn die Befehle im Auftrag abgeschlossen sind, Wait-Job
gibt ein Auftragsobjekt zurück und setzt die Ausführung fort.
Sie können das Wait-Job
Cmdlet verwenden, um mit dem Cmdlet oder dem Start-Job
AsJob-Parameter des Cmdlets auf den Start von Invoke-Command
Aufträgen zu warten. Weitere Informationen zu Aufträgen finden Sie unter Informationen zu Aufträgen.
Ab Windows PowerShell 3.0 wartet das Wait-Job
Cmdlet auch auf benutzerdefinierte Auftragstypen, z. B. Workflowaufträge und Instanzen geplanter Aufträge. Um das Warten auf Aufträge eines bestimmten Typs zu aktivieren Wait-Job
, importieren Sie das Modul, das den benutzerdefinierten Auftragstyp unterstützt, in die Sitzung, bevor Sie das Cmdlet ausführen, indem Sie entweder Get-Job
das Import-Module
Cmdlet verwenden oder ein Cmdlet im Modul verwenden oder abrufen. Informationen zu einem bestimmten benutzerdefinierten Auftragstyp finden Sie in der Dokumentation der Funktion „Benutzerdefinierte Auftragstypen“.
Beispiele
Beispiel 1: Warten auf alle Aufträge
Get-Job | Wait-Job
Mit diesem Befehl wird gewartet, bis alle in der Sitzung ausgeführten Aufträge abgeschlossen sind.
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 mit Aufträgen verwenden, die Wait-Job
mit dem Start-Job
Cmdlet auf Remotecomputern gestartet wurden. Befehle Start-Job
und Wait-Job
werden mithilfe des Cmdlets an den Invoke-Command
Remotecomputer übermittelt.
In diesem Beispiel wird Wait-Job
ermittelt, 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 wird verwendetInvoke-Command
, um in jeder der drei Sitzungen in $s
auszuführenStart-Job
.
Alle Aufträge haben den Namen Date1.
Der dritte Befehl verwendet Invoke-Command
zum Ausführen Wait-Job
von . Dieser Befehl wartet, bis die Date1
Aufträge auf jedem Computer abgeschlossen sind. Es speichert die resultierende Auflistung (Array) von Auftragsobjekten in der $done
Variablen.
Der vierte Befehl verwendet die Count-Eigenschaft des Arrays von Auftragsobjekten in der $done
Variablen, um zu bestimmen, wie viele der Aufträge abgeschlossen sind.
Beispiel 3: Bestimmen, wann der erste Auftrag abgeschlossen wird
$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 Any-Parameter von Wait-Job
verwendet, um zu bestimmen, wann sich der erste von vielen Aufträgen, die in der aktuellen Sitzung ausgeführt werden, in einem beendenden Zustand befindet. Außerdem wird gezeigt, wie Sie das Cmdlet verwenden, um auf den Wait-Job
Abschluss von Remoteaufträgen zu warten.
Der erste Befehl erstellt eine PSSession auf jedem der in der Machines.txt-Datei aufgeführten Computer und speichert die PSSession-Objekte in der $s
Variablen. Der Befehl verwendet das Get-Content
Cmdlet, um den Inhalt der Datei abzurufen. Der Get-Content
Befehl ist in Klammern eingeschlossen, um sicherzustellen, dass er vor dem New-PSSession
Befehl ausgeführt wird.
Der zweite Befehl speichert eine Get-EventLog
Befehlszeichenfolge in Anführungszeichen in der $c
Variablen.
Der dritte Befehl verwendet Invoke-Command
das Cmdlet, um in jeder Der Sitzungen in $s
auszuführenStart-Job
.
Der Start-Job
Befehl startet einen Auftrag, der den Get-EventLog
Befehl in der $c
Variablen ausführt.
Der Befehl verwendet den Using-Bereichsmodifizierer, um anzugeben, dass die $c
Variable auf dem lokalen Computer definiert wurde. Der Using-Bereichsbezeichner wurde in Windows PowerShell 3.0 eingeführt. Weitere Informationen zum Verwenden des Bereichsmodifizierers 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 Any-Parameter , um zu warten, bis der erste Auftrag auf den Remotecomputern beendet wird.
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 Timeoutparameter 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 wird verwendetInvoke-Command
, um in jedem DER PSSession-Objekte in $s
auszuführenStart-Job
. Die resultierenden Auftragsobjekte werden in der $jobs
Variablen gespeichert.
Der dritte Befehl wird verwendetInvoke-Command
, um in jeder der Sitzungen in $s
auszuführenWait-Job
. Der Wait-Job
Befehl bestimmt, ob alle Befehle innerhalb von 30 Sekunden abgeschlossen wurden. Sie 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 wurde nur der Befehl auf dem Computer Server02 nach 30 Sekunden abgeschlossen. Wait-Job
beendet die Wartezeit, gibt das Objekt zurück, das den abgeschlossenen Auftrag darstellt, und zeigt die Eingabeaufforderung an.
Die $done
Variable 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
Dieser Befehl identifiziert drei Aufträge anhand ihrer IDs und wartet, bis sich einer von ihnen in einem beendeten Zustand befindet. Die Ausführung wird fortgesetzt, wenn der erste Auftrag abgeschlossen ist.
Beispiel 6: Warten Sie einen Bestimmten 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 Auftrag nach Name
Wait-Job -Name "Job3"
Dieser Befehl verwendet den Auftragsnamen, um den Auftrag zu identifizieren, auf den gewartet werden soll.
Beispiel 8: Warten auf Aufträge auf einem lokalen Computer, der mit Start-Job gestartet wurde
$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 Wait-Job
Cmdlet mit Aufträgen verwenden, die auf dem lokalen Computer mit Start-Job
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 wird verwendet Start-Job
, um einen Auftrag auf dem lokalen Computer zu starten. Der Auftrag führt einen Get-ChildItem
Befehl aus, mit dem alle Dateien abgerufen werden, die eine .ps1 Dateinamenerweiterung aufweisen, die in der letzten Woche hinzugefügt oder aktualisiert wurden.
Der dritte Befehl wird verwendet Wait-Job
, um zu warten, bis sich der Auftrag in einem beendenden Zustand befindet. Wenn der Auftrag abgeschlossen ist, zeigt der Befehl das Auftragsobjekt an, das Informationen zum Auftrag enthält.
Beispiel 9: Warten auf Aufträge, die auf Remotecomputern mit Invoke-Command gestartet wurden
$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 mit Aufträgen verwenden Wait-Job
, die auf Remotecomputern mithilfe des AsJob-ParametersInvoke-Command
von gestartet wurden. Bei Verwendung von AsJob 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 Wait-Job
wird ermittelt, ob sich ein Get-Process
Befehl, der in den Sitzungen auf drei Remotecomputern ausgeführt wird, in einem beendenden Zustand befindet.
Mit dem ersten Befehl werden PSSession-Objekte auf drei Computern erstellt und in der $s
Variablen gespeichert.
Der zweite Befehl wird verwendetInvoke-Command
, um in jeder der drei Sitzungen in $s
auszuführenGet-Process
.
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 $j
Variablen gespeichert.
Der dritte Befehl verwendet einen Pipelineoperator (|
), um das Auftragsobjekt an $j
das Wait-Job
Cmdlet zu senden. In Invoke-Command
diesem Fall ist kein Befehl erforderlich, da sich der Auftrag auf dem lokalen Computer befindet.
Beispiel 10: Warten auf einen Auftrag mit einer ID
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 wird. Wartet standardmäßig, bis alle angegebenen Aufträge abgeschlossen sind, Wait-Job
bevor die Eingabeaufforderung angezeigt wird.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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 mit benutzerdefinierten Auftragstypen, z. B. Workflowaufträgen und geplanten Aufträgen. Es funktioniert nicht für Standardaufträge, z. B. solche, die mithilfe des Start-Job
Cmdlets erstellt werden. Weitere Informationen zur Unterstützung für diesen Parameter finden Sie unter dem Hilfethema für den Auftragstyp.
Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.
Type: | Hashtable |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Force
Gibt an, dass dieses Cmdlet weiterhin auf Aufträge im Zustand Angehalten oder Getrennt wartet. Standardmäßig Wait-Job
wird die Wartezeit zurückgegeben oder beendet, wenn sich Aufträge in einem der folgenden Zustände befinden:
- Abgeschlossen
- Fehler
- Beendet
- Ausgesetzt
- Getrennt
Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Id
Gibt ein Array von IDs von Aufträgen an, auf die dieses Cmdlet wartet.
Die ID ist eine ganze Zahl, die den Auftrag in der aktuellen Sitzung eindeutig identifiziert. Es ist einfacher zu merken und einzugeben als die instance-ID, aber sie ist nur in der aktuellen Sitzung eindeutig. Sie können eine oder mehrere IDs durch Kommas getrennt eingeben. Geben Sie ein, Get-Job
um die ID eines Auftrags zu suchen.
Type: | Int32[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-InstanceId
Gibt ein Array von instance-IDs von Aufträgen an, auf die dieses Cmdlet wartet. Standardmäßig werden alle Aufträge fortgesetzt.
Eine Instanz-ID ist eine GUID, die den Auftrag auf dem Computer eindeutig identifiziert. Um die instance-ID eines Auftrags zu ermitteln, verwenden Sie Get-Job
.
Type: | Guid[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | 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 Wait-Job
Cmdlet zu senden. Wartet standardmäßig auf alle Aufträge, Wait-Job
die in der aktuellen Sitzung erstellt wurden.
Type: | Job[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Name
Gibt Anzeigenamen von Aufträgen an, auf die dieses Cmdlet wartet.
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-State
Gibt einen Auftragsstatus an. Dieses Cmdlet wartet nur auf Aufträge im angegebenen Zustand. Zulässige Werte für diesen Parameter:
- NotStarted
- Wird ausgeführt
- Abgeschlossen
- Fehler
- Beendet
- Blockiert
- Ausgesetzt
- Getrennt
- Wird angehalten
- Wird beendet
Weitere Informationen zu Auftragszuständen finden Sie unter JobState Enumeration.
Type: | JobState |
Accepted values: | NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | 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. Das Timing beginnt, wenn Sie den Wait-Job
Befehl und nicht den Start-Job
Befehl übermitteln.
Wenn diese Zeit überschritten wird, endet die Wartezeit und die Ausführung wird fortgesetzt, auch wenn der Auftrag noch ausgeführt wird. Der Befehl zeigt keine Fehlermeldung an.
Type: | Int32 |
Aliases: | TimeoutSec |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
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 beendenden Zustand darstellen. Wenn die Wartezeit endet, weil der Wert des Timeoutparameters überschritten wird, Wait-Job
werden keine Objekte zurückgegeben.
Hinweise
PowerShell enthält die folgenden Aliase für Wait-Job
:
- Alle Plattformen:
wjb
Standardmäßig Wait-Job
wird die Wartezeit zurückgegeben oder beendet, wenn sich Aufträge in einem der folgenden Zustände befinden:
- Abgeschlossen
- Fehler
- Beendet
- Ausgesetzt
- Getrennt
Wait-Job
Verwenden Sie den Force-Parameter, um weiter auf angehaltene und getrennte Aufträge zu warten.