Freigeben über


Wait-Job

Unterdrückt die Eingabeaufforderung, bis einer oder alle Windows PowerShell-Hintergrundaufträge, die in der Sitzung ausgeführt werden, abgeschlossen sind.

Syntax

SessionIdParameterSet (Standard)

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 Windows PowerShell-Hintergrundaufträge abgeschlossen sind, bevor die Eingabeaufforderung angezeigt wird. Sie können warten, bis ein Hintergrundauftrag abgeschlossen ist oder bis alle Hintergrundaufträge abgeschlossen sind, und Sie können eine maximale Wartezeit für den Auftrag festlegen.

Wenn die Befehle im Auftrag abgeschlossen sind, zeigt Wait-Job die Eingabeaufforderung an und gibt ein Auftragsobjekt zurück, damit Sie es an einen anderen Befehl übergeben können.

Sie können das Cmdlet Wait-Job verwenden, um auf Hintergrundaufträge zu warten, z. B. solche, die mit dem Cmdlet Start-Job oder dem AsJob-Parameter des Cmdlets Invoke-Command gestartet wurden. Weitere Informationen zu Windows PowerShell-Hintergrundaufträgen finden Sie unter about_Jobs.

Ab Windows PowerShell 3.0 wartet das Cmdlet Wait-Job auch auf benutzerdefinierte Auftragstypen, z. B. Workflowaufträge und Instanzen geplanter Aufträge. Um Wait-Job das Warten auf Aufträge eines bestimmten Typs zu ermöglichen, 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 eines Cmdlets oder durch 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

PS C:\> Get-Job | Wait-Job

Dieser Befehl wartet, bis alle Hintergrundaufträge, die in der Sitzung ausgeführt werden, abgeschlossen sind.

Beispiel 2: Warten auf Aufträge, die auf Remotecomputern gestartet wurden, mithilfe von Start-Job

PS C:\> $s = New-PSSession Server01, Server02, Server03
PS C:\> Invoke-Command -Session $s -ScriptBlock {Start-Job -Name Date1 -ScriptBlock {Get-Date}}
PS C:\> $done = Invoke-Command -Session $s -Command {Wait-Job -Name Date1}
PS C:\> $done.Count
3

In diesem Beispiel wird gezeigt, wie das Cmdlet "Wait-Job" mithilfe des Cmdlets "Start-Job " mit Aufträgen verwendet wird, die auf Remotecomputern gestartet werden. Sowohl die Befehle Start-Job als auch Wait-Job werden mit dem Cmdlet Invoke-Command an den Remotecomputer übermittelt.

In diesem Beispiel wird Wait-Job verwendet, um zu bestimmen, ob ein Get-Date Befehl, der als Hintergrundauftrag auf drei verschiedenen Computern ausgeführt wird, abgeschlossen ist.

Mit dem ersten Befehl wird auf jedem der drei Remotecomputer eine Windows PowerShell-Sitzung (PSSession) erstellt und in der Variablen $s gespeichert.

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, bis die Date1-Aufträge auf jedem Computer abgeschlossen sind. Sie speichert die resultierende Sammlung (Array) von Auftragsobjekten in der Variablen $done.

Der vierte Befehl verwendet die Count-Eigenschaft des Arrays von Auftragsobjekten in der Variablen $done, um zu bestimmen, wie viele der Aufträge abgeschlossen sind.

Beispiel 3: Bestimmen, wann der erste Hintergrundauftrag abgeschlossen ist

PS C:\> $s = New-PSSession (Get-Content Machines.txt)
PS C:\> $c = 'Get-EventLog -LogName System | where {$_.EntryType -eq "error" --and $_.Source -eq "LSASRV"} | Out-File Errors.txt'
PS C:\> Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {$Using:c}
PS C:\> Invoke-Command -Session $s -ScriptBlock {Wait-Job -Any}

In diesem Beispiel wird der Any-Parameter von Wait-Job verwendet, um zu bestimmen, wann der erste von vielen Hintergrundaufträgen, die in der aktuellen Sitzung ausgeführt werden, abgeschlossen ist. Außerdem wird gezeigt, wie Sie mit dem Cmdlet Wait-Job auf den Abschluss von Remoteaufträgen warten.

Mit dem ersten Befehl wird auf jedem der in der Machines.txt Datei aufgeführten Computer eine PSSession-Datei erstellt und die PSSession-Objekte in der Variablen $s gespeichert. Der Befehl verwendet das Cmdlet Get-Content, um den Inhalt der Datei abzurufen. Der Befehl Get-Content wird in Klammern gesetzt, um sicherzustellen, dass er vor dem New-PSSession Befehl ausgeführt wird.

Mit dem zweiten Befehl wird eine Get-EventLog-Befehlszeichenfolge in Anführungszeichen in der Variablen $c gespeichert.

Im dritten Befehl wird Invoke-Command Cmdlet verwendet, um Start-Job in jeder der Sitzungen in $s auszuführen. Der Befehl Startauftrag startet einen Hintergrundauftrag, der den Befehl Get-EventLog in der variablen $c ausführt.

Der Befehl verwendet die Using scope modifier to indicate that the $c variable was defined on the local computer. Der Modifikator Using für den Bereich wurde in Windows PowerShell 3.0 eingeführt. Weitere Hinweise zum Modifizierer "Verwenden des Bereichs" finden Sie unter about_Remote_Variables (https://go.microsoft.com/fwlink/?LinkID=252653).

Der vierte Befehl verwendet Invoke-Command, um einen Wait-Job-Befehl in den Sitzungen auszuführen. Mit dem Any-Parameter wird gewartet, bis der erste Auftrag auf den Remotecomputern abgeschlossen ist.

Beispiel 4: Festlegen einer Wartezeit für Aufträge auf Remotecomputern

PS C:\> $s = New-PSSession Server01, Server02, Server03
PS C:\> $jobs = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {Get-Date}}
PS C:\> $done = Invoke-Command -Session $s -ScriptBlock {Wait-Job -Timeout 30}

In diesem Beispiel wird gezeigt, wie der Timeout-Parameter von Wait-Job verwendet wird, um eine maximale Wartezeit für die Aufträge festzulegen, die auf Remotecomputern ausgeführt werden.

Mit dem ersten Befehl wird auf jedem der drei Remotecomputer (Server01, Server02 und Server03) eine PSSession-Instanz erstellt und dann die PSSession-Objekte in der Variablen $s gespeichert.

Der zweite Befehl verwendet Invoke-Command, um Start-Job in jedem der PSSession-Objekte in $s auszuführen. Sie speichert die resultierenden Auftragsobjekte in der Variablen $jobs.

Der dritte Befehl verwendet Invoke-Command , um Wait-Job in jeder der Sitzungen 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 Variablen $done.

In diesem Fall ist nach 30 Sekunden nur der Befehl auf dem Server02-Computer abgeschlossen. Wait-Job beendet die Wartezeit , zeigt die Eingabeaufforderung an und gibt das Objekt zurück, das den abgeschlossenen Auftrag darstellt.

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

PS C:\> Wait-Job -id 1,2,5 -Any

Dieser Befehl identifiziert drei Aufträge anhand ihrer IDs und wartet, bis einer von ihnen abgeschlossen ist. Die Eingabeaufforderung wird zurückgegeben, 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.

PS C:\> 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 Eingabeaufforderung trotzdem zurückgegeben, und der Auftrag wird weiterhin im Hintergrund ausgeführt.

Beispiel 7: Warten auf einen Job nach Name

PS C:\> 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

PS C:\> $j = Start-Job -ScriptBlock {Get-ChildItem *.ps1| where {$_lastwritetime -gt ((Get-Date) - (New-TimeSpan -Days 7))}}
PS C:\> $j | Wait-Job

In diesem Beispiel wird gezeigt, wie das Cmdlet Wait-Job mit Aufträgen verwendet wird, die auf dem lokalen Computer mithilfe von Start-Job gestartet werden.

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 Hintergrundauftrag auf dem lokalen Computer zu starten. Der Auftrag führt einen Get-ChildItem Befehl aus, der alle Dateien abruft, die eine .ps1 Dateinamenerweiterung aufweisen und in der letzten Woche hinzugefügt oder aktualisiert wurden.

Der dritte Befehl verwendet Wait-Job , um zu warten, bis der Auftrag abgeschlossen ist. 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

PS C:\> $s = New-PSSession Server01, Server02, Server03
PS C:\> $j = Invoke-Command -Session $s -ScriptBlock {Get-Process} -AsJob
PS C:\> $j | Wait-Job

In diesem Beispiel wird gezeigt, wie Wait-Job mit Aufträgen verwendet wird, die auf Remotecomputern gestartet werden, indem der AsJob-Parameter von Invoke-Command verwendet wird. 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, abgeschlossen ist.

Mit dem ersten Befehl werden PSSession-Objekte auf drei Computern erstellt und in der Variablen $s gespeichert.

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 Hintergrundauftrag 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)

PS C:\> Get-Job

Id   Name     State      HasMoreData     Location             Command
--   ----     -----      -----------     --------             -------
1    Job1     Completed  True            localhost,Server01.. get-service
4    Job4     Completed  True            localhost            dir | where

PS C:\> Wait-Job -Id 1

Dieser Befehl wartet auf den Auftrag mit dem ID-Wert 1.

Parameter

-Any

Gibt an, dass dieses Cmdlet die Eingabeaufforderung anzeigt und das Auftragsobjekt zurückgibt, 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 für Standard-Hintergrundaufträge, z. B. bei denen, die mit dem Cmdlet Startauftrag 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 gibt Wait-Job den Wartevorgang zurück oder beendet ihn, wenn sich Aufträge in einem der folgenden Zustände 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-Jobein, 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 Jobs, 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 zu Auftragszuständen finden Sie unter JobState Enumeration in der MSDN Library.

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 Hintergrundauftrag in Sekunden an. Der Standardwert -1 gibt an, dass das Cmdlet wartet, bis der Auftrag abgeschlossen ist. Die Zeitsteuerung beginnt, wenn Sie den Befehl "Wait-Job" und nicht den Befehl "Start-Job" übermitteln.

Wenn diese Zeit überschritten wird, endet die Wartezeit und die Eingabeaufforderung wird zurückgegeben, 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 abgeschlossenen Aufträge darstellen. Wenn die Wartezeit endet, weil der Wert des Parameters Timeout überschritten wird, gibt Wait-Job keine Objekte zurück.

Hinweise

  • Standardmäßig gibt Wait-Job den Wartevorgang zurück oder beendet ihn, wenn sich Aufträge in einem der folgenden Zustände befinden:
  • Abgeschlossen
  • gescheitert
  • Angehalten
  • Suspendiert
  • Disconnected Um Wait-Job anzuweisen, weiterhin auf angehaltene und getrennte Aufträge zu warten, verwenden Sie den Force-Parameter .