Delen via


Receive-Job

Hiermee haalt u de resultaten op van de PowerShell-achtergrondtaken in de huidige sessie.

Syntaxis

Receive-Job
       [-Job] <Job[]>
       [[-Location] <String[]>]
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [<CommonParameters>]
Receive-Job
       [-Job] <Job[]>
       [[-ComputerName] <String[]>]
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [<CommonParameters>]
Receive-Job
       [-Job] <Job[]>
       [[-Session] <PSSession[]>]
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [<CommonParameters>]
Receive-Job
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [-Name] <String[]>
       [<CommonParameters>]
Receive-Job
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [-InstanceId] <Guid[]>
       [<CommonParameters>]
Receive-Job
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [-Id] <Int32[]>
       [<CommonParameters>]

Description

De Receive-Job cmdlet haalt de resultaten van PowerShell-achtergrondtaken op, zoals taken die zijn gestart met behulp van de Start-Job-cmdlet of de AsJob parameter van een cmdlet. U kunt de resultaten van alle taken ophalen of taken identificeren op basis van hun naam, id, exemplaar-id, computernaam, locatie of sessie, of door een taakobject in te dienen.

Wanneer u een PowerShell-achtergrondtaak start, wordt de taak gestart, maar worden de resultaten niet onmiddellijk weergegeven. In plaats daarvan retourneert de opdracht een object dat de achtergrondtaak vertegenwoordigt. Het taakobject bevat nuttige informatie over de taak, maar bevat geen resultaten. Met deze methode kunt u in de sessie blijven werken terwijl de taak wordt uitgevoerd. Zie about_Jobsvoor meer informatie over achtergrondtaken in PowerShell.

De Receive-Job-cmdlet haalt de resultaten op die zijn gegenereerd op het moment dat de Receive-Job opdracht wordt verzonden. Als de resultaten nog niet zijn voltooid, kunt u extra Receive-Job opdrachten uitvoeren om de resterende resultaten op te halen.

Taakresultaten worden standaard verwijderd uit het systeem wanneer u ze ontvangt, maar u kunt de parameter Behouden gebruiken om de resultaten op te slaan, zodat u ze opnieuw kunt ontvangen. Als u de taakresultaten wilt verwijderen, voert u de opdracht Receive-Job opnieuw uit zonder de parameter behouden, sluit u de sessie of gebruikt u de Remove-Job cmdlet om de taak uit de sessie te verwijderen.

Vanaf Windows PowerShell 3.0 krijgt Receive-Job ook de resultaten van aangepaste taaktypen, zoals werkstroomtaken en exemplaren van geplande taken. Als u Receive-Job wilt inschakelen om de resultaten een aangepast taaktype op te halen, importeert u de module die het aangepaste taaktype ondersteunt in de sessie voordat u een Receive-Job opdracht 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: Resultaten ophalen voor een bepaalde taak

$job = Start-Job -ScriptBlock {Get-Process}
Receive-Job -Job $job

Deze opdrachten gebruiken de parameter Job van Receive-Job om de resultaten van een bepaalde taak op te halen.

Met de eerste opdracht wordt een taak gestart met Start-Job en wordt het taakobject opgeslagen in de variabele $job.

De tweede opdracht gebruikt de Receive-Job cmdlet om de resultaten van de taak op te halen. Hierbij wordt de parameter Job gebruikt om de taak op te geven.

Voorbeeld 2: de parameter Keep gebruiken

$job = Start-Job -ScriptBlock {Get-Service dhcp, fakeservice}
$job | Receive-Job -Keep

Cannot find any service with service name 'fakeservice'.
    + CategoryInfo          : ObjectNotFound: (fakeservice:String) [Get-Service], ServiceCommandException
    + FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell.Commands.GetServiceCommand
    + PSComputerName        : localhost

Status   Name               DisplayName
------   ----               -----------
Running  dhcp               DHCP Client

$job | Receive-Job -Keep

Cannot find any service with service name 'fakeservice'.
    + CategoryInfo          : ObjectNotFound: (fakeservice:String) [Get-Service], ServiceCommandException
    + FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell.Commands.GetServiceCommand
    + PSComputerName        : localhost

Status   Name               DisplayName
------   ----               -----------
Running  dhcp               DHCP Client

In dit voorbeeld wordt een taak opgeslagen in de variabele $job en wordt de taak door de Receive-Job cmdlet uitgevoerd. De parameter -Keep wordt ook gebruikt om toe te staan dat alle geaggregeerde stroomgegevens na de eerste weergave opnieuw worden opgehaald.

Voorbeeld 3: Resultaten van verschillende achtergrondtaken ophalen

Wanneer u de parameter AsJob van Invoke-Command gebruikt om een taak te starten, wordt het taakobject gemaakt op de lokale computer, ook al wordt de taak uitgevoerd op de externe computers. Als gevolg hiervan gebruikt u lokale opdrachten om de taak te beheren.

Wanneer u AsJobgebruikt, retourneert PowerShell ook één taakobject dat een onderliggende taak bevat voor elke taak die is gestart. In dit geval bevat het taakobject drie onderliggende taken, één voor elke taak op elke externe computer.

# Use the Invoke-Command cmdlet with the -AsJob parameter to start a background job that runs a Get-Service command on three remote computers.
# Store the resulting job object in the $j variable
$j = Invoke-Command -ComputerName Server01, Server02, Server03 -ScriptBlock {Get-Service} -AsJob
# Display the value of the **ChildJobs** property of the job object in $j.
# The display shows that the command created three child jobs, one for the job on each remote computer.
# You could also use the -IncludeChildJobs parameter of the Get-Job cmdlet.
$j.ChildJobs

Id   Name     State      HasMoreData   Location       Command
--   ----     -----      -----------   --------       -------
2    Job2     Completed  True          Server01       Get-Service
3    Job3     Completed  True          Server02       Get-Service
4    Job4     Completed  True          Server03       Get-Service

# Use the Receive-Job cmdlet to get the results of just the Job3 child job that ran on the Server02 computer.
# Use the *Keep* parameter to allow you to view the aggregated stream data more than once.
Receive-Job -Name Job3 -Keep

Status  Name        DisplayName                        PSComputerName
------  ----------- -----------                        --------------
Running AeLookupSvc Application Experience             Server02
Stopped ALG         Application Layer Gateway Service  Server02
Running Appinfo     Application Information            Server02
Running AppMgmt     Application Management             Server02

Voorbeeld 4: Resultaten ophalen van achtergrondtaken op meerdere externe computers

# Use the New-PSSession cmdlet to create three user-managed PSSessions on three servers, and save the sessions in the $s variable.
$s = New-PSSession -ComputerName Server01, Server02, Server03
# Use Invoke-Command run a Start-Job command in each of the PSSessions in the $s variable.
# The job outputs the ComputerName of each server.
# Save the job objects in the $j variable.
$j = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {$env:COMPUTERNAME}}
# To confirm that these job objects are from the remote machines, run Get-Job to show no local jobs running.
Get-Job



# Display the three job objects in $j.
# Note that the Localhost location is not the local computer, but instead localhost as it relates to the job on each Server.
$j

Id   Name     State      HasMoreData   Location   Command
--   ----     -----      -----------   --------   -------
1    Job1     Completed  True          Localhost  $env:COMPUTERNAME
2    Job2     Completed  True          Localhost  $env:COMPUTERNAME
3    Job3     Completed  True          Localhost  $env:COMPUTERNAME

# Use Invoke-Command to run a Receive-Job command in each of the sessions in the $s variable and save the results in the $Results variable.
# The Receive-Job command must be run in each session because the jobs were run locally on each server.
$results = Invoke-Command -Session $s -ScriptBlock {Receive-Job -Job $Using:j}

Server01
Server02
Server03

In dit voorbeeld ziet u hoe u de resultaten van achtergrondtaken kunt uitvoeren op drie externe computers. In tegenstelling tot het vorige voorbeeld, heeft het gebruik van Invoke-Command om de opdracht Start-Job uit te voeren, daadwerkelijk drie onafhankelijke taken gestart op elk van de drie computers. Als gevolg hiervan heeft de opdracht drie taakobjecten geretourneerd die drie taken vertegenwoordigen die lokaal worden uitgevoerd op drie verschillende computers.

Notitie

In de laatste opdracht, omdat $j een lokale variabele is, gebruikt het scriptblok de Met behulp van bereikaanpassing om de $j variabele te identificeren. Zie about_Remote_Variablesvoor meer informatie over de Het gebruik van bereikaanpassing.

Voorbeeld 5: Onderliggende taken openen

De parameter -Keep behoudt de status van de geaggregeerde streams van een taak, zodat deze opnieuw kan worden bekeken. Zonder deze parameter worden alle geaggregeerde stroomgegevens gewist wanneer de taak wordt ontvangen. Zie about_Job_Details voor meer informatie

Notitie

De geaggregeerde streams bevatten de streams van alle onderliggende taken. U kunt nog steeds de afzonderlijke gegevensstromen bereiken via het taakobject en onderliggende taakobjecten.

Start-Job -Name TestJob -ScriptBlock {dir C:\, Z:\}
# Without the Keep parameter, aggregated child job data is displayed once.
# Then destroyed.
Receive-Job -Name TestJob

Directory: C:\

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-r---        1/24/2019   7:11 AM                Program Files
d-r---        2/13/2019   8:32 AM                Program Files (x86)
d-r---        10/3/2018  11:47 AM                Users
d-----         2/7/2019   1:52 AM                Windows
Cannot find drive. A drive with the name 'Z' does not exist.
    + CategoryInfo          : ObjectNotFound: (Z:String) [Get-ChildItem], DriveNotFoundException
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
    + PSComputerName        : localhost

# It would seem that the child job data is gone.
Receive-Job -Name TestJob



# Using the object model, you can still retrieve child job data and streams.
$job = Get-Job -Name TestJob
$job.ChildJobs[0].Error

Cannot find drive. A drive with the name 'Z' does not exist.
    + CategoryInfo          : ObjectNotFound: (Z:String) [Get-ChildItem], DriveNotFoundException
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
    + PSComputerName        : localhost

Parameters

-AutoRemoveJob

Geeft aan dat deze cmdlet de taak verwijdert nadat deze de taakresultaten heeft geretourneerd. Als de taak meer resultaten heeft, wordt de taak nog steeds verwijderd, maar Receive-Job een bericht weergeeft.

Deze parameter werkt alleen voor aangepaste taaktypen. Het is ontworpen voor exemplaren van taaktypen die de taak of het type buiten de sessie opslaan, zoals exemplaren van geplande taken.

Deze parameter kan niet worden gebruikt zonder de parameter Wait.

Deze parameter is geïntroduceerd in Windows PowerShell 3.0.

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

-ComputerName

Hiermee geeft u een matrix van namen van computers.

Deze parameter selecteert uit de taakresultaten die zijn opgeslagen op de lokale computer. Er worden geen gegevens opgehaald voor taken die worden uitgevoerd op externe computers. Als u taakresultaten wilt ophalen die zijn opgeslagen op externe computers, gebruikt u de cmdlet Invoke-Command om een Receive-Job opdracht op afstand uit te voeren.

Type:String[]
Aliassen:Cn
Position:1
Default value:All computers available
Vereist:False
Pijplijninvoer accepteren:True
Jokertekens accepteren:True

-Force

Geeft aan dat deze cmdlet blijft wachten als taken de status onderbroken of verbroken hebben. De parameter Wait van Receive-Job retourneert standaard of beëindigt de wachttijd wanneer taken een van de volgende statussen hebben:

  • Volbracht
  • Mislukt
  • Gestopt
  • Latent
  • Verbroken.

De parameter Forceren is alleen geldig wanneer de parameter Wait ook in de opdracht wordt gebruikt.

Deze parameter is geïntroduceerd in Windows PowerShell 3.0.

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

-Id

Hiermee geeft u een matrix van id's. Met deze cmdlet worden de resultaten opgehaald van taken met de opgegeven id's.

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. Gebruik Get-Jobom de id van een taak te vinden.

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. Met deze cmdlet worden de resultaten van taken met de opgegeven exemplaar-id's opgehaald.

Een exemplaar-id is een GUID waarmee de taak op de computer uniek wordt geïdentificeerd. Gebruik de Get-Job-cmdlet om de exemplaar-id van een taak te vinden.

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

-Job

Hiermee geeft u de taak waarvoor resultaten worden opgehaald.

Voer een variabele in die de taak of een opdracht bevat die de taak ophaalt. U kunt ook een taakobject doorsluisen naar Receive-Job.

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

-Keep

Geeft aan dat met deze cmdlet de geaggregeerde stroomgegevens in het systeem worden opgeslagen, zelfs nadat u ze hebt ontvangen. Geaggregeerde streamgegevens worden standaard gewist nadat ze zijn bekeken met Receive-Job.

Als u de sessie sluit of de taak verwijdert met de Remove-Job cmdlet, worden ook geaggregeerde streamgegevens verwijderd.

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

-Location

Hiermee geeft u een matrix van locaties. Met deze cmdlet worden alleen de resultaten van taken op de opgegeven locaties opgehaald.

Type:String[]
Position:1
Default value:All locations
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-Name

Hiermee geeft u een matrix van beschrijvende namen. Met deze cmdlet worden de resultaten opgehaald van taken met de opgegeven namen. Jokertekens worden ondersteund.

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

-NoRecurse

Geeft aan dat deze cmdlet alleen resultaten van de opgegeven taak ophaalt. Standaard haalt Receive-Job ook de resultaten op van alle onderliggende taken van de opgegeven taak.

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

-Session

Hiermee geeft u een matrix van sessies. Met deze cmdlet worden de resultaten opgehaald van taken die zijn uitgevoerd in de opgegeven PowerShell-sessie (PSSession). Voer een variabele in die de PSSession- of een opdracht bevat waarmee de PSSession-wordt ophaalt, zoals een Get-PSSession opdracht.

Type:PSSession[]
Position:1
Default value:All sessions
Vereist:False
Pijplijninvoer accepteren:True
Jokertekens accepteren:False

-Wait

Geeft aan dat deze cmdlet de opdrachtprompt onderdrukt totdat alle taakresultaten zijn ontvangen. Standaard retourneert Receive-Job onmiddellijk de beschikbare resultaten.

De parameter Wait standaard wacht totdat de taak een van de volgende statussen heeft:

  • Volbracht
  • Mislukt
  • Gestopt
  • Latent
  • Verbroken.

Als u de parameter Wait wilt om door te gaan met wachten als de taakstatus is onderbroken of Verbroken, gebruikt u de parameter Force samen met de parameter Wait.

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

-WriteEvents

Geeft aan dat deze cmdlet wijzigingen in de taakstatus rapporteert terwijl deze wacht tot de taak is voltooid.

Deze parameter is alleen geldig wanneer de parameter Wait wordt gebruikt in de opdracht en de parameter Keep wordt weggelaten.

Deze parameter is geïntroduceerd in Windows PowerShell 3.0.

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

-WriteJobInResults

Geeft aan dat deze cmdlet het taakobject retourneert, gevolgd door de resultaten.

Deze parameter is alleen geldig wanneer de parameter Wait wordt gebruikt in de opdracht en de parameter Keep wordt weggelaten.

Deze parameter is geïntroduceerd in Windows PowerShell 3.0.

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

Invoerwaarden

Job

U kunt taakobjecten doorsluisen naar deze cmdlet.

Uitvoerwaarden

PSObject

Deze cmdlet retourneert de resultaten van de opdrachten in de taak.