Wait-Job
Onderdrukt de opdrachtprompt totdat een of alle Windows PowerShell-achtergrondtaken die in de sessie worden uitgevoerd, zijn voltooid.
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 tot Windows PowerShell-achtergrondtaken zijn voltooid voordat de opdrachtprompt wordt weergegeven. U kunt wachten totdat een achtergrondtaak is voltooid of totdat alle achtergrondtaken zijn voltooid en u kunt een maximale wachttijd voor de taak instellen.
Wanneer de opdrachten in de taak zijn voltooid, wachttaak de opdrachtprompt weergeeft en een taakobject retourneert, zodat u het naar een andere opdracht kunt doorsturen.
U kunt wait-job cmdlet gebruiken om te wachten op achtergrondtaken, zoals taken die zijn gestart met behulp van de cmdlet Start-Job of de parameter AsJob van de Invoke-Command cmdlet. Zie about_Jobs voor meer informatie over Windows PowerShell-achtergrondtaken.
Vanaf Windows PowerShell 3.0 wacht de wachttaak- cmdlet ook op aangepaste taaktypen, zoals werkstroomtaken en exemplaren van geplande taken. Als u wilt dat wachttaak wachten 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
PS C:\> Get-Job | Wait-Job
Met deze opdracht wordt gewacht tot alle achtergrondtaken die in de sessie worden uitgevoerd, zijn voltooid.
Voorbeeld 2: Wachten op taken die zijn gestart op externe computers met behulp van 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 dit voorbeeld ziet u hoe u de cmdlet Wait-Job gebruikt met taken die zijn gestart op externe computers met behulp van de cmdlet Start-Job. Zowel als wait-job opdrachten worden verzonden naar de externe computer met behulp van de cmdlet Invoke-Command.
In dit voorbeeld wordt wachttaak gebruikt om te bepalen of een Get-Date opdracht die als achtergrondtaak op drie verschillende computers wordt uitgevoerd, 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 maakt gebruik van 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 maakt gebruik van Invoke-Command om wait-job-uit te voeren. Met deze opdracht wordt gewacht totdat de datum1-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 variabele $done om te bepalen hoeveel taken zijn voltooid.
Voorbeeld 3: Bepalen wanneer de eerste achtergrondtaak is voltooid
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 dit voorbeeld wordt de parameter Any van Wait-Job- gebruikt om te bepalen wanneer de eerste van de vele achtergrondtaken die in de huidige sessie worden uitgevoerd, zijn voltooid. 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 die worden vermeld 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 opdracht Get-Content tussen haakjes staat om ervoor te zorgen dat deze wordt uitgevoerd vóór de opdracht New-PSSession.
Met de tweede opdracht wordt een Get-EventLog opdrachttekenreeks, tussen aanhalingstekens, opgeslagen in de $c variabele.
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 achtergrondtaak gestart waarmee de opdracht Get-EventLog in de variabele $c wordt uitgevoerd.
De opdracht maakt gebruik van de Met behulp van bereikaanpassing om aan te geven dat de $c variabele is gedefinieerd op de lokale computer. De Het gebruik van bereikaanpassing wordt geïntroduceerd in Windows PowerShell 3.0. Zie about_Remote_Variables (https://go.microsoft.com/fwlink/?LinkID=252653) voor meer informatie over de Het wijzigen van bereik.
De vierde opdracht maakt gebruik van Invoke-Command om een wait-job opdracht uit te voeren in de sessies. Hierbij wordt de parameter Any gebruikt om te wachten totdat de eerste taak op de externe computers is voltooid.
Voorbeeld 4: Een wachttijd instellen voor taken op externe computers
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 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 $s variabele.
De tweede opdracht gebruikt Invoke-Command om starttaak- uit te voeren in elk van de PSSession objecten in $s. De resulterende taakobjecten worden opgeslagen in de $jobs variabele.
De derde opdracht maakt gebruik van Invoke-Command om wait-job- uit te voeren in elk van de sessies in $s. De opdracht wachttaak bepaalt of alle opdrachten binnen 30 seconden zijn voltooid. Hierbij wordt de parameter Time-out met een waarde van 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. wachttaak het wachten beëindigt, de opdrachtprompt weergeeft en het object retourneert dat de taak vertegenwoordigt die is voltooid.
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
PS C:\> 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 is voltooid. De opdrachtprompt wordt geretourneerd wanneer de eerste taak is voltooid.
Voorbeeld 6: Wacht op een punt en sta vervolgens toe dat de taak op de achtergrond wordt voortgezet
PS C:\> Wait-Job -Name "DailyLog" -Timeout 120
Met deze opdracht wordt 120 seconden (twee minuten) gewacht totdat de DailyLog-taak is voltooid. Als de taak in de komende twee minuten niet is voltooid, wordt de opdrachtprompt toch geretourneerd en blijft de taak op de achtergrond worden uitgevoerd.
Voorbeeld 7: Wachten op een taak op naam
PS C:\> 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
PS C:\> $j = Start-Job -ScriptBlock {Get-ChildItem *.ps1| where {$_lastwritetime -gt ((Get-Date) - (New-TimeSpan -Days 7))}}
PS C:\> $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 maakt gebruik van Start-Job om een achtergrondtaak 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 maakt gebruik van wachttaak om te wachten totdat de taak is voltooid. 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
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 dit voorbeeld ziet u hoe u wachttaak 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 opdracht Get-Process wordt uitgevoerd in de sessies op drie externe computers is voltooid.
Met de eerste opdracht maakt u PSSession objecten op drie computers en slaat deze op in de $s variabele.
De tweede opdracht maakt gebruik van 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 achtergrondtaak. De opdracht retourneert een taakobject, net zoals de taken die zijn gestart met starttaak, 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 cmdlet wachttaak. 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
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
Met deze opdracht wacht u op de taak met een id-waarde van 1.
Parameters
-Any
Geeft aan dat deze cmdlet de opdrachtprompt weergeeft en het taakobject retourneert wanneer een taak is voltooid. Standaard wacht wachttaak 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 voor standaardachtergrondtaken, zoals taken die zijn gemaakt met behulp van de cmdlet Start-Job. 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. Standaard retourneert wachttaak of beëindigt u de wachttijd wanneer taken een van de volgende statussen hebben:
- Volbracht
- Mislukt
- Gestopt
- Latent
- Verbroken
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 u Get-Job
.
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. Gebruik Get-Jobom de exemplaar-id van een taak te vinden.
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 te verzenden naar de wait-job cmdlet. Standaard wachttaak 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 acceptabele waarden voor deze parameter zijn:
- Niet gestart
- Lopend
- Volbracht
- Mislukt
- Gestopt
- Geblokkeerd
- Latent
- Verbroken
- Opschorting
- Stoppen
Zie JobState-opsomming in de MSDN-bibliotheek 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 achtergrondtaak, in seconden. De standaardwaarde - 1 geeft aan dat de cmdlet wacht totdat de taak is voltooid. De tijdsinstellingen worden gestart wanneer u de opdracht wachttaak verzendt, niet de opdracht starttaak.
Als deze tijd wordt overschreden, eindigt de wachttijd en retourneert de opdrachtprompt, 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 voltooide taken vertegenwoordigen. Als de wachttijd eindigt omdat de waarde van de Time-out- parameter wordt overschreden, retourneert wait-job geen objecten retourneert.
Notities
- Standaard retourneert wachttaak of beëindigt u de wachttijd wanneer taken een van de volgende statussen hebben:
- Volbracht
- Mislukt
- Gestopt
- Latent
- Verbinding verbroken Als u wachttaak wilt om te blijven wachten op onderbroken en niet-verbonden taken, gebruikt u de parameter Force.