Wait-Job
Wacht totdat een of alle PowerShell-taken die in de sessie worden uitgevoerd, de eindstatus hebben.
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>]
Description
De Wait-Job
cmdlet wacht tot een taak de status Wordt beëindigd voordat de uitvoering wordt voortgezet.
De eindstatussen zijn:
- Voltooid
- Mislukt
- Gestopt
- Onderbroken
- Ontkoppeld
U kunt wachten tot een opgegeven taak of alle taken de status Beëindigen hebben. U kunt ook een maximale wachttijd voor de taak instellen met behulp van de parameter Timeout of de parameter Forceren gebruiken om te wachten op een taak in de Suspended
status of Disconnected
.
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 parameter AsJob 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 het wachten op taken van een bepaald type wilt inschakelen Wait-Job
, importeert u de module die ondersteuning biedt voor het aangepaste taaktype in de sessie voordat u de Get-Job
cmdlet uitvoert, 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 aangepast taaktype voor informatie over een bepaald aangepast taaktype.
Voorbeelden
Voorbeeld 1: Wachten op alle taken
Get-Job | Wait-Job
Met deze opdracht wordt gewacht totdat alle taken die in de sessie worden uitgevoerd, zijn voltooid.
Voorbeeld 2: Wachten op taken die zijn gestart op externe computers met behulp van 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 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 als Start-Job
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 als taak op drie verschillende computers wordt uitgevoerd, is voltooid.
De eerste opdracht maakt een Windows PowerShell sessie (PSSession) op elk van de drie externe computers en slaat deze op in de $s
variabele.
De tweede opdracht 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 tot 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 met taakobjecten in de $done
variabele om te bepalen hoeveel van de 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 Any van Wait-Job
gebruikt om te bepalen wanneer de eerste van de vele taken die in de huidige sessie worden uitgevoerd, de eindstatus hebben. 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 bestand Machines.txt 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 in de $c
variabele opgeslagen.
De derde opdracht maakt gebruik Invoke-Command
van cmdlet 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 gebruikt de bereikaanpassing gebruiken om aan te geven dat de $c
variabele is gedefinieerd op de lokale computer. De wijzigingsfunctie Bereik gebruiken is geïntroduceerd in Windows PowerShell 3.0. Zie about_Remote_Variables voor meer informatie over het gebruik vanbereikaanpassing.
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 totdat 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 van Wait-Job
gebruikt om 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 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. De parameter Timeout met een waarde van 30 wordt gebruikt om de maximale wachttijd vast te stellen en vervolgens worden de resultaten van de opdracht opgeslagen in de $done
variabele.
In dit geval is na 30 seconden alleen de opdracht op de Server02-computer 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 is 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 tot een van deze taken de eindstatus heeft. De uitvoering wordt voortgezet wanneer de eerste taak is voltooid.
Voorbeeld 6: Wacht een periode 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 niet in de komende twee minuten wordt voltooid, wordt de uitvoering voortgezet en wordt de taak op de achtergrond uitgevoerd.
Voorbeeld 7: Wachten op een taak op naam
Wait-Job -Name "Job3"
Deze opdracht gebruikt de taaknaam om de taak te identificeren waarop 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 zijn gestart op de lokale computer met behulp van Start-Job
.
Met deze opdrachten wordt een taak gestart waarmee de Windows PowerShell scriptbestanden worden opgehaald die in de afgelopen week zijn toegevoegd of bijgewerkt.
De eerste opdracht gebruikt Start-Job
om een taak op de lokale computer te starten. Met de taak wordt een Get-ChildItem
opdracht uitgevoerd waarmee alle bestanden met een .ps1 bestandsnaamextensie worden ophaalt die in de afgelopen week zijn toegevoegd of bijgewerkt.
De derde opdracht gebruikt Wait-Job
om te wachten totdat de taak een eindstatus 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 AsJob-parameter 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, zelfs als de taak wordt 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 een afsluitstatus heeft.
Met de eerste opdracht maakt u PSSession-objecten op drie computers en slaat u deze op in de $s
variabele.
De tweede opdracht gebruikt Invoke-Command
om uit te voeren Get-Process
in elk van de drie sessies in $s
.
De opdracht gebruikt de parameter AsJob om de opdracht asynchroon uit te voeren als een taak. De opdracht retourneert een taakobject, net als de taken die zijn gestart met behulp van Start-Job
, en 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. Een Invoke-Command
opdracht is in dit geval niet 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 wordt gewacht op de taak met de id-waarde 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 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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 hash-tabel in waarin de sleutels taakeigenschappen zijn en de waarden waarden voor taakeigenschap zijn.
Deze parameter werkt alleen voor aangepaste taaktypen, zoals werkstroomtaken en geplande taken. Het werkt niet voor 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 |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Force
Geeft aan dat deze cmdlet blijft wachten op taken met de status Onderbroken of Verbroken. Wait-Job
Standaard wordt het wachten geretourneerd of beëindigd 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 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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 instantie-id, maar deze 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 vinden, typt u Get-Job
.
Type: | Int32[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | 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 die de taak op de computer uniek identificeert. Gebruik Get-Job
om de instantie-id van een taak te vinden.
Type: | Guid[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Job
Hiermee geeft u de taken op waarop deze cmdlet wacht. Voer een variabele in die de taakobjecten bevat of een opdracht 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 |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Name
Hiermee geeft u beschrijvende namen van taken waarop deze cmdlet wacht.
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-State
Hiermee geeft u een taakstatus. Deze cmdlet wacht alleen op taken met de opgegeven status. De aanvaardbare waarden voor deze parameter zijn:
- Niet gestart
- Wordt uitgevoerd
- Voltooid
- Mislukt
- Gestopt
- Geblokkeerd
- Onderbroken
- Ontkoppeld
- Onderbreken
- Stoppen
Zie Opsomming JobState voor meer informatie over taakstatussen.
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
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 wachttijd beëindigd en wordt de uitvoering voortgezet, zelfs als de taak nog steeds wordt uitgevoerd. De opdracht geeft geen foutbericht weer.
Type: | Int32 |
Aliases: | TimeoutSec |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Invoerwaarden
System.Management.Automation.RemotingJob
U kunt een taakobject doorsnijden naar deze cmdlet.
Uitvoerwaarden
System.Management.Automation.PSRemotingJob
Deze cmdlet retourneert taakobjecten die de taken met een afsluitstatus vertegenwoordigen. Als de wachttijd eindigt omdat de waarde van de time-outparameter wordt overschreden, Wait-Job
worden er geen objecten geretourneerd.
Notities
PowerShell bevat de volgende aliassen voor Wait-Job
:
- Alle platformen:
wjb
Wait-Job
Standaard retourneert of beëindigt het wachten wanneer taken een van de volgende statussen hebben:
- Voltooid
- Mislukt
- Gestopt
- Onderbroken
- Ontkoppeld
Wait-Job
Gebruik de parameter Forceren om door te gaan met wachten op onderbroken en verbroken taken.