Wait-Job
Wacht tot een of alle PowerShell-jobs die in de sessie worden uitgevoerd, zich in een beëindigingsstatus bevinden.
Syntaxis
SessionIdParameterSet (Standaard)
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>]
Description
De cmdlet Wait-Job wacht totdat een taak de afsluitstatus heeft voordat de uitvoering wordt voortgezet.
De eindstatussen zijn:
- Volbracht
- Mislukt
- Gestopt
- Opgeschort
- Niet verbonden
U kunt wachten tot een opgegeven taak of alle taken een eindstatus bereiken. 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 statussen Suspended of Disconnected.
Wanneer de opdrachten in de taak zijn voltooid, retourneert Wait-Job een taakobject en wordt de uitvoering voortgezet.
U kunt de Wait-Job-cmdlet gebruiken om te wachten op taken die zijn gestart met behulp van de cmdlet Start-Job of de parameter AsJob van de Invoke-Command-cmdlet. Voor meer informatie over banen, zie about_Jobs.
Vanaf Windows PowerShell 3.0 wacht de Wait-Job-cmdlet ook op aangepaste taaktypen, zoals workflowtaken en exemplaren van geplande taken. Als u wilt dat Wait-Job wacht op taken van een bepaald type, importeer dan de module die het aangepaste taaktype ondersteunt in de sessie voordat u de Get-Job-cmdlet uitvoert, ofwel met behulp van de Import-Module-cmdlet, of door een cmdlet in de module te gebruiken of te verkrijgen. Raadpleeg de documentatie van de functie voor aangepaste taaktypen voor informatie over een specifiek 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 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. Zowel Start-Job als Wait-Job opdrachten worden via de Invoke-Command-cmdlet naar de externe computer verzonden.
In dit voorbeeld wordt Wait-Job gebruikt 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 u deze op in de variabele $s.
De tweede opdracht gebruikt Invoke-Command om Start-Job uit te voeren in elk van de drie sessies in $s.
Alle taken hebben de naam Date1.
De derde opdracht gebruikt Invoke-Command om Wait-Jobuit te voeren. Deze opdracht wacht totdat de Date1 taken op elke computer zijn voltooid. De resulterende verzameling (matrix) van taak objecten wordt opgeslagen in de variabele $done.
De vierde opdracht maakt gebruik van de eigenschap Count van de matrix met taakobjecten in de $done variabele om te bepalen hoeveel taken er 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 veel taken die in de huidige sessie worden uitgevoerd, de afsluitstatus hebben. U ziet ook hoe u de cmdlet Wait-Job kunt gebruiken om te wachten tot externe taken zijn voltooid.
Met de eerste opdracht maakt u een PSSession- op elk van de computers in het Machines.txt-bestand en slaat u de PSSession--objecten op in de variabele $s. 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 wordt uitgevoerd vóór de opdracht New-PSSession.
Met de tweede opdracht wordt een Get-EventLog opdrachtreeks, tussen aanhalingstekens, opgeslagen in de variabele $c.
De derde opdracht maakt gebruik van Invoke-Command cmdlet om Start-Job uit te voeren in elk van de sessies in $s.
Met de opdracht Start-Job wordt een taak gestart waarmee de opdracht Get-EventLog in de variabele $c wordt uitgevoerd.
De opdracht gebruikt de Using: bereikaanpassing om aan te geven dat de $c variabele is gedefinieerd op de lokale computer. De Using: bereikaanpassing wordt geïntroduceerd in Windows PowerShell 3.0. Zie Using: voor meer informatie over de bereikaanpassing.
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 in de staat van beëindiging is.
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 parameter Time-out 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 variabele $s.
De tweede opdracht gebruikt Invoke-Command om Start-Job uit te voeren in elk van de PSSession objecten in $s. De resulterende taakobjecten worden opgeslagen in de $jobs variabele.
De derde opdracht gebruikt Invoke-Command om Wait-Job uit te voeren in elk van de sessies in $s. De Wait-Job opdracht bepaalt of alle opdrachten binnen 30 seconden zijn voltooid. Hierbij wordt de parameter Time-out met de waarde 30 gebruikt om de maximale wachttijd vast te stellen. Vervolgens worden de resultaten van de opdracht opgeslagen in de variabele $done.
In dit geval, na 30 seconden, alleen de opdracht op de Server02-computer is voltooid.
Wait-Job het wachten beëindigt, 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 op Server02 is uitgevoerd.
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 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 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 door 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 cmdlet Wait-Job 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 een .ps1 bestandsnaamextensie worden weergegeven die in de afgelopen week zijn toegevoegd of bijgewerkt.
De derde opdracht gebruikt Wait-Job om te wachten totdat de taak de 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 u Wait-Job gebruikt met taken die zijn gestart op externe computers met behulp van de parameter AsJob van Invoke-Command. Wanneer u AsJobgebruikt, 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 Wait-Job gebruikt om te bepalen of een Get-Process opdracht die in de sessies op drie externe computers wordt uitgevoerd, de afsluitstatus heeft.
De eerste opdracht maakt PSSession objecten op drie computers en slaat deze op in de $s variabele.
De tweede opdracht gebruikt Invoke-Command om Get-Process uit te voeren 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 zoals 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 in $j te verzenden naar de Wait-Job cmdlet. In dit geval is geen Invoke-Command-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 dit commando 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. Standaard wacht Wait-Job totdat alle opgegeven taken zijn voltooid voordat de prompt wordt weergegeven.
Parametereigenschappen
| Type: | SwitchParameter |
| Default value: | None |
| Ondersteunt jokertekens: | False |
| DontShow: | False |
Parametersets
(All)
| Position: | Named |
| Verplicht: | False |
| Waarde uit pijplijn: | False |
| Waarde uit pijplijn op eigenschapsnaam: | False |
| Waarde van resterende argumenten: | 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.
Parametereigenschappen
| Type: | Hashtable |
| Default value: | None |
| Ondersteunt jokertekens: | False |
| DontShow: | False |
Parametersets
FilterParameterSet
| Position: | 0 |
| Verplicht: | True |
| Waarde uit pijplijn: | False |
| Waarde uit pijplijn op eigenschapsnaam: | True |
| Waarde van resterende argumenten: | False |
-Force
Geeft aan dat deze cmdlet blijft wachten op taken met de status Onderbroken of Verbroken. Standaard keert Wait-Job terug, of eindigt de wachttijd, wanneer taken in een van de volgende statussen verkeren:
- Volbracht
- Mislukt
- Gestopt
- Opgeschort
- Niet verbonden
Deze parameter is geïntroduceerd in Windows PowerShell 3.0.
Parametereigenschappen
| Type: | SwitchParameter |
| Default value: | None |
| Ondersteunt jokertekens: | False |
| DontShow: | False |
Parametersets
(All)
| Position: | Named |
| Verplicht: | False |
| Waarde uit pijplijn: | False |
| Waarde uit pijplijn op eigenschapsnaam: | False |
| Waarde van resterende argumenten: | False |
-Id
Hiermee specificeert u een array van ID's van opdrachten 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 u Get-Job.
Parametereigenschappen
| Type: | Int32[] |
| Default value: | None |
| Ondersteunt jokertekens: | False |
| DontShow: | False |
Parametersets
SessionIdParameterSet
| Position: | 0 |
| Verplicht: | True |
| Waarde uit pijplijn: | False |
| Waarde uit pijplijn op eigenschapsnaam: | True |
| Waarde van resterende argumenten: | False |
-InstanceId
Hiermee specificeert u een array van instance-id's van jobs 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. Gebruik Get-Jobom de exemplaar-id van een taak te vinden.
Parametereigenschappen
| Type: | Guid[] |
| Default value: | None |
| Ondersteunt jokertekens: | False |
| DontShow: | False |
Parametersets
InstanceIdParameterSet
| Position: | 0 |
| Verplicht: | True |
| Waarde uit pijplijn: | False |
| Waarde uit pijplijn op eigenschapsnaam: | True |
| Waarde van resterende argumenten: | False |
-Job
Hiermee specifieert u de taken 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. Standaard wacht Wait-Job op alle jobs die door de huidige sessie zijn gemaakt.
Parametereigenschappen
| Type: | Job[] |
| Default value: | None |
| Ondersteunt jokertekens: | False |
| DontShow: | False |
Parametersets
JobParameterSet
| Position: | 0 |
| Verplicht: | True |
| Waarde uit pijplijn: | True |
| Waarde uit pijplijn op eigenschapsnaam: | True |
| Waarde van resterende argumenten: | False |
-Name
Hiermee geeft u vriendelijke namen van taken op waarvoor deze cmdlet wacht.
Parametereigenschappen
| Type: | String[] |
| Default value: | None |
| Ondersteunt jokertekens: | False |
| DontShow: | False |
Parametersets
NameParameterSet
| Position: | 0 |
| Verplicht: | True |
| Waarde uit pijplijn: | False |
| Waarde uit pijplijn op eigenschapsnaam: | True |
| Waarde van resterende argumenten: | False |
-State
Bepaalt een taakstatus. Deze cmdlet wacht alleen op taken met de opgegeven status. De acceptabele waarden voor deze parameter zijn:
- Niet gestart
- Hardlopen
- Volbracht
- Mislukt
- Gestopt
- Geblokkeerd
- Opgeschort
- Niet verbonden
- Onderbreken
- Het stoppen
Zie Opsomming JobStatevoor meer informatie over taakstatussen.
Parametereigenschappen
| Type: | JobState |
| Default value: | None |
| Geaccepteerde waarden: | NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint |
| Ondersteunt jokertekens: | False |
| DontShow: | False |
Parametersets
StateParameterSet
| Position: | 0 |
| Verplicht: | True |
| Waarde uit pijplijn: | False |
| Waarde uit pijplijn op eigenschapsnaam: | True |
| Waarde van resterende argumenten: | 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 opdracht Wait-Job 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. De opdracht geeft geen foutmelding weer.
Parametereigenschappen
| Type: | Int32 |
| Default value: | None |
| Ondersteunt jokertekens: | False |
| DontShow: | False |
| Aliassen: | TimeoutSec |
Parametersets
(All)
| Position: | Named |
| Verplicht: | False |
| Waarde uit pijplijn: | False |
| Waarde uit pijplijn op eigenschapsnaam: | False |
| Waarde van resterende argumenten: | False |
CommonParameters
Deze cmdlet ondersteunt de algemene parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction en -WarningVariable. Zie about_CommonParametersvoor meer informatie.
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 time-outparameter wordt overschreden, retourneert Wait-Job geen objecten.
Notities
PowerShell bevat de volgende aliassen voor Wait-Job:
- Alle platforms:
wjb
Standaard keert Wait-Job terug, of eindigt de wachttijd, wanneer taken in een van de volgende statussen verkeren:
- Volbracht
- Mislukt
- Gestopt
- Opgeschort
- Niet verbonden
Gebruik de parameter Wait-Job om te laten doorgaan met wachten op Gepauzeerde en Niet-verbonden taken.