Delen via


Wait-Job

Wacht tot een of alle PowerShell-taken die in de sessie worden uitgevoerd, een afsluitstatus hebben.

Syntaxis

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>]

Description

De Wait-Job cmdlet wacht totdat een taak de afsluitstatus heeft voordat de uitvoering wordt voortgezet. De afsluitstatussen zijn:

  • Voltooid
  • Mislukt
  • Gestopt
  • Onderbroken
  • Ontkoppeld

U kunt wachten tot een opgegeven taak of alle taken een eindstatus hebben. U kunt ook een maximale wachttijd instellen voor de taak met behulp van de parameter Time-out of de parameter Force gebruiken om te wachten op een taak in de Suspended of Disconnected statussen.

Wanneer de opdrachten in de taak zijn voltooid, Wait-Job wordt een taakobject geretourneerd en wordt de uitvoering voortgezet.

U kunt de Wait-Job cmdlet gebruiken om te wachten op taken die zijn gestart met behulp van de Start-Job cmdlet of de AsJob-parameter van de Invoke-Command cmdlet. Zie about_Jobs voor meer informatie over taken.

Vanaf Windows PowerShell 3.0 wacht de Wait-Job cmdlet ook op aangepaste taaktypen, zoals werkstroomtaken en exemplaren van geplande taken. Als u wilt wachten Wait-Job op taken van een bepaald type, importeert u de module die het aangepaste taaktype ondersteunt in de sessie voordat u de Get-Job cmdlet uitvoert, hetzij met behulp van de Import-Module cmdlet of door een cmdlet in de module te gebruiken of op te halen. Zie de documentatie van de functie aangepaste taaktypen voor informatie over een bepaald type aangepaste taak.

Voorbeelden

Voorbeeld 1: Wachten op alle taken

Get-Job | Wait-Job

Met deze opdracht wordt gewacht tot alle taken die in de sessie worden uitgevoerd, zijn voltooid.

Voorbeeld 2: Wachten op taken die zijn gestart op externe computers met behulp van starttaak

$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 dit voorbeeld ziet u hoe u de Wait-Job cmdlet gebruikt met taken die zijn gestart op externe computers met behulp van de Start-Job cmdlet. Wait-Job Zowel Start-Job als opdrachten worden verzonden naar de externe computer met behulp van de Invoke-Command cmdlet.

In dit voorbeeld wordt gebruikt Wait-Job om te bepalen of een Get-Date opdracht die wordt uitgevoerd als een taak op drie verschillende computers is voltooid.

Met de eerste opdracht maakt u een Windows PowerShell-sessie (PSSession) op elk van de drie externe computers en slaat deze op in de $s variabele.

De tweede opdracht wordt gebruikt Invoke-Command om uit te voeren Start-Job in elk van de drie sessies in $s. Alle taken hebben de naam Date1.

De derde opdracht gebruikt Invoke-Command om uit te voeren Wait-Job. Met deze opdracht wordt gewacht totdat de Date1 taken op elke computer zijn voltooid. De resulterende verzameling (matrix) van taakobjecten wordt opgeslagen in de $done variabele.

De vierde opdracht maakt gebruik van de eigenschap Count van de matrix van taakobjecten in de $done variabele om te bepalen hoeveel taken zijn voltooid.

Voorbeeld 3: Bepalen wanneer de eerste taak is voltooid

$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 dit voorbeeld wordt de parameter Wait-Job Any gebruikt om te bepalen wanneer de eerste van de vele taken die in de huidige sessie worden uitgevoerd, de afsluitstatus heeft. U ziet ook hoe u de Wait-Job cmdlet gebruikt om te wachten tot externe taken zijn voltooid.

Met de eerste opdracht maakt u een PSSession op elk van de computers die worden vermeld in het Machines.txt-bestand en slaat u de PSSession-objecten op in de $s variabele. De opdracht gebruikt de Get-Content cmdlet om de inhoud van het bestand op te halen. De Get-Content opdracht staat tussen haakjes om ervoor te zorgen dat deze vóór de New-PSSession opdracht wordt uitgevoerd.

Met de tweede opdracht wordt een Get-EventLog opdrachtreeks, tussen aanhalingstekens, opgeslagen in de $c variabele.

De derde opdracht maakt gebruik Invoke-Command van cmdlets om uit te voeren Start-Job in elk van de sessies in $s. Met Start-Job de opdracht wordt een taak gestart waarmee de Get-EventLog opdracht in de $c variabele wordt uitgevoerd.

De opdracht maakt gebruik van de scope modifier using om aan te geven dat de $c variabele is gedefinieerd op de lokale computer. De scope modifier using wordt geïntroduceerd in Windows PowerShell 3.0. Zie about_Remote_Variables voor meer informatie over de aanpassing van het bereik gebruiken.

De vierde opdracht gebruikt Invoke-Command om een Wait-Job opdracht uit te voeren in de sessies. De parameter Any wordt gebruikt om te wachten tot de eerste taak op de externe computers de afsluitstatus heeft.

Voorbeeld 4: Een wachttijd instellen voor taken op externe computers

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 dit voorbeeld ziet u hoe u de time-outparameter gebruikt om Wait-Job een maximale wachttijd in te stellen voor de taken die worden uitgevoerd op externe computers.

Met de eerste opdracht maakt u een PSSession op elk van de drie externe computers (Server01, Server02 en Server03) en slaat u vervolgens de PSSession-objecten op in de $s variabele.

De tweede opdracht gebruikt Invoke-Command om uit te voeren Start-Job in elk van de PSSession-objecten in $s. De resulterende taakobjecten worden opgeslagen in de $jobs variabele.

De derde opdracht wordt gebruikt Invoke-Command om uit te voeren Wait-Job in elk van de sessies in $s. De Wait-Job opdracht bepaalt of alle opdrachten binnen 30 seconden zijn voltooid. Hierbij wordt de time-outparameter gebruikt met de waarde 30 om de maximale wachttijd vast te stellen en worden de resultaten van de opdracht vervolgens opgeslagen in de $done variabele.

In dit geval, na 30 seconden, alleen de opdracht op de Server02-computer is voltooid. Wait-Job beëindigt de wachttijd, retourneert het object dat de taak vertegenwoordigt die is voltooid en geeft de opdrachtprompt weer.

De $done variabele bevat een taakobject dat de taak vertegenwoordigt die wordt uitgevoerd op Server02.

Voorbeeld 5: Wacht tot een van de verschillende taken is voltooid

Wait-Job -id 1,2,5 -Any

Met deze opdracht worden drie taken geïdentificeerd op basis van hun id's en wordt gewacht totdat een van deze taken de eindstatus heeft. De uitvoering wordt voortgezet wanneer de eerste taak is voltooid.

Voorbeeld 6: Wacht op een punt en sta vervolgens toe dat de taak op de achtergrond wordt voortgezet

Wait-Job -Name "DailyLog" -Timeout 120

Met deze opdracht wordt 120 seconden (twee minuten) gewacht totdat de DailyLog-taak is voltooid. Als de taak de komende twee minuten niet is voltooid, wordt de uitvoering voortgezet en blijft de taak op de achtergrond worden uitgevoerd.

Voorbeeld 7: Wachten op een taak op naam

Wait-Job -Name "Job3"

Met deze opdracht wordt de taaknaam gebruikt om de taak te identificeren waarvoor moet worden gewacht.

Voorbeeld 8: Wachten op taken op de lokale computer die zijn gestart met Start-Job

$j = Start-Job -ScriptBlock {Get-ChildItem -Filter *.ps1| Where-Object {$PSItem.LastWriteTime -gt ((Get-Date) - (New-TimeSpan -Days 7))}}
$j | Wait-Job

In dit voorbeeld ziet u hoe u de Wait-Job cmdlet gebruikt met taken die op de lokale computer zijn gestart met behulp van Start-Job.

Met deze opdrachten wordt een taak gestart die de Windows PowerShell-scriptbestanden ophaalt die in de afgelopen week zijn toegevoegd of bijgewerkt.

De eerste opdracht gebruikt Start-Job om een taak op de lokale computer te starten. De taak voert een Get-ChildItem opdracht uit waarmee alle bestanden met de bestandsextensie .ps1 worden gedownload die in de afgelopen week zijn toegevoegd of bijgewerkt.

De derde opdracht gebruikt Wait-Job om te wachten totdat de taak de afsluitstatus heeft. Wanneer de taak is voltooid, wordt met de opdracht het taakobject weergegeven, dat informatie over de taak bevat.

Voorbeeld 9: Wachten op taken die zijn gestart op externe computers met behulp van Invoke-Command

$s = New-PSSession -ComputerName Server01, Server02, Server03
$j = Invoke-Command -Session $s -ScriptBlock {Get-Process} -AsJob
$j | Wait-Job

In dit voorbeeld ziet u hoe Wait-Job u taken gebruikt die zijn gestart op externe computers met behulp van de astaakparameter van Invoke-Command. Wanneer u AsJob gebruikt, wordt de taak gemaakt op de lokale computer en worden de resultaten automatisch geretourneerd naar de lokale computer, ook al wordt de taak uitgevoerd op de externe computers.

In dit voorbeeld wordt gebruikt Wait-Job om te bepalen of een Get-Process opdracht die wordt uitgevoerd in de sessies op drie externe computers, de afsluitstatus heeft.

Met de eerste opdracht worden PSSession-objecten op drie computers gemaakt en opgeslagen in de $s variabele.

De tweede opdracht wordt gebruikt Invoke-Command om uit te voeren Get-Process in elk van de drie sessies in $s. De opdracht maakt gebruik van de AsJob-parameter om de opdracht asynchroon uit te voeren als een taak. De opdracht retourneert een taakobject, net zoals de taken die zijn gestart met behulp van Start-Joben het taakobject wordt opgeslagen in de $j variabele.

De derde opdracht maakt gebruik van een pijplijnoperator (|) om het taakobject naar $j de Wait-Job cmdlet te verzenden. In Invoke-Command dit geval is geen opdracht vereist, omdat de taak zich op de lokale computer bevindt.

Voorbeeld 10: Wachten op een taak met een 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

Met deze opdracht wacht u op de taak met een id-waarde van 1.

Parameters

-Any

Geeft aan dat deze cmdlet het taakobject retourneert en doorgaat met de uitvoering wanneer een taak is voltooid. Wacht standaard Wait-Job totdat alle opgegeven taken zijn voltooid voordat de prompt wordt weergegeven.

Type:SwitchParameter
Position:Named
Default value:None
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-Filter

Hiermee geeft u een hash-tabel met voorwaarden. Deze cmdlet wacht op taken die voldoen aan alle voorwaarden in de hash-tabel. Voer een hashtabel in waarin de sleutels taakeigenschappen zijn en de waarden taakeigenschapswaarden zijn.

Deze parameter werkt alleen voor aangepaste taaktypen, zoals werkstroomtaken en geplande taken. Het werkt niet aan standaardtaken, zoals taken die zijn gemaakt met behulp van de Start-Job cmdlet. Zie het Help-onderwerp voor het taaktype voor informatie over ondersteuning voor deze parameter.

Deze parameter is geïntroduceerd in Windows PowerShell 3.0.

Type:Hashtable
Position:0
Default value:None
Vereist:True
Pijplijninvoer accepteren:True
Jokertekens accepteren:False

-Force

Geeft aan dat deze cmdlet blijft wachten op taken met de status Onderbroken of Verbroken. Wait-Job Retourneert of beëindigt de wachttijd standaard wanneer taken een van de volgende statussen hebben:

  • Voltooid
  • Mislukt
  • Gestopt
  • Onderbroken
  • Ontkoppeld

Deze parameter is geïntroduceerd in Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:None
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-Id

Hiermee geeft u een matrix van id's van taken waarvoor deze cmdlet wacht.

De id is een geheel getal dat de taak in de huidige sessie uniek identificeert. Het is gemakkelijker om te onthouden en te typen dan de exemplaar-id, maar het is alleen uniek in de huidige sessie. U kunt een of meer id's typen, gescheiden door komma's. Als u de id van een taak wilt zoeken, typt Get-Jobu .

Type:Int32[]
Position:0
Default value:None
Vereist:True
Pijplijninvoer accepteren:True
Jokertekens accepteren:False

-InstanceId

Hiermee geeft u een matrix van exemplaar-id's van taken waarvoor deze cmdlet wacht. De standaardwaarde is alle taken.

Een exemplaar-id is een GUID waarmee de taak op de computer uniek wordt geïdentificeerd. Als u de exemplaar-id van een taak wilt vinden, gebruikt u Get-Job.

Type:Guid[]
Position:0
Default value:None
Vereist:True
Pijplijninvoer accepteren:True
Jokertekens accepteren:False

-Job

Hiermee geeft u de taken op waarvoor deze cmdlet wacht. Voer een variabele in die de taakobjecten of een opdracht bevat waarmee de taakobjecten worden opgehaald. U kunt ook een pijplijnoperator gebruiken om taakobjecten naar de Wait-Job cmdlet te verzenden. Wacht standaard Wait-Job op alle taken die in de huidige sessie zijn gemaakt.

Type:Job[]
Position:0
Default value:None
Vereist:True
Pijplijninvoer accepteren:True
Jokertekens accepteren:False

-Name

Hiermee geeft u beschrijvende namen van taken waarvoor deze cmdlet wacht.

Type:String[]
Position:0
Default value:None
Vereist:True
Pijplijninvoer accepteren:True
Jokertekens accepteren:False

-State

Hiermee geeft u een taakstatus. Deze cmdlet wacht alleen op taken met de opgegeven status. De aanvaardbare waarden voor deze parameter zijn:

  • NotStarted
  • Wordt uitgevoerd
  • Voltooid
  • Mislukt
  • Gestopt
  • Geblokkeerd
  • Onderbroken
  • Ontkoppeld
  • Tijdelijk blokkeren
  • Stoppen

Zie De opsomming JobState voor meer informatie over taakstatussen.

Type:JobState
Geaccepteerde waarden:NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint
Position:0
Default value:None
Vereist:True
Pijplijninvoer accepteren:True
Jokertekens accepteren:False

-Timeout

Hiermee geeft u de maximale wachttijd voor elke taak, in seconden. De standaardwaarde - 1 geeft aan dat de cmdlet wacht totdat de taak is voltooid. De tijdsinstellingen worden gestart wanneer u de Wait-Job opdracht verzendt, niet de Start-Job opdracht.

Als deze tijd wordt overschreden, wordt de wacht beëindigd en wordt de uitvoering voortgezet, zelfs als de taak nog steeds wordt uitgevoerd. Met de opdracht wordt geen foutbericht weergegeven.

Type:Int32
Aliassen:TimeoutSec
Position:Named
Default value:None
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

Invoerwaarden

System.Management.Automation.RemotingJob

U kunt een taakobject doorsluisen naar deze cmdlet.

Uitvoerwaarden

System.Management.Automation.PSRemotingJob

Met deze cmdlet worden taakobjecten geretourneerd die de taken in een eindstatus vertegenwoordigen. Als de wachttijd eindigt omdat de waarde van de parameter Time-out wordt overschreden, Wait-Job worden er geen objecten geretourneerd.

Notities

PowerShell bevat de volgende aliassen voor Wait-Job:

  • Alle platforms:
    • wjb

Wait-Job Retourneert of beëindigt de wachttijd standaard wanneer taken een van de volgende statussen hebben:

  • Voltooid
  • Mislukt
  • Gestopt
  • Onderbroken
  • Ontkoppeld

Wait-Job Als u wilt doorgaan met wachten op onderbroken en niet-verbonden taken, gebruikt u de parameter Force.