Share via


Receive-Job

Obtient les résultats des travaux en arrière-plan PowerShell dans la session active.

Syntax

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

L’applet Receive-Job de commande obtient les résultats des travaux en arrière-plan PowerShell, tels que ceux démarrés à l’aide de l’applet Start-Job de commande ou du paramètre AsJob de n’importe quelle applet de commande. Vous pouvez obtenir les résultats de toutes les tâches ou identifier les tâches par leur nom, ID, ID d'instance, nom d'ordinateur, emplacement ou session, ou en envoyant un objet de traitement.

Lorsque vous démarrez un travail en arrière-plan PowerShell, le travail démarre, mais les résultats n’apparaissent pas immédiatement. À la place, la commande retourne un objet qui représente la tâche en arrière-plan. L'objet de traitement contient les informations utiles sur la tâche, mais pas les résultats. Cette méthode vous permet de continuer à travailler dans la session pendant l’exécution du travail. Pour plus d’informations sur les travaux en arrière-plan dans PowerShell, consultez about_Jobs.

L’applet Receive-Job de commande obtient les résultats qui ont été générés au moment où la Receive-Job commande est envoyée. Si les résultats ne sont pas encore terminés, vous pouvez exécuter des commandes supplémentaires Receive-Job pour obtenir les résultats restants.

Par défaut, les résultats de la tâche sont supprimés du système lorsque vous les recevez, mais vous pouvez utiliser le paramètre Keep pour enregistrer les résultats afin de les recevoir à nouveau. Pour supprimer les résultats du travail, réexécutez la Receive-Job commande sans le paramètre Keep , fermez la session ou utilisez l’applet Remove-Job de commande pour supprimer le travail de la session.

À partir de Windows PowerShell 3.0, Receive-Job obtient également les résultats des types de travaux personnalisés, tels que les travaux de flux de travail et les instances de travaux planifiés. Pour permettre Receive-Job d’obtenir les résultats d’un type de travail personnalisé, importez le module qui prend en charge le type de travail personnalisé dans la session avant d’exécuter une Receive-Job commande, soit à l’aide de l’applet Import-Module de commande, soit en utilisant ou en obtenant une applet de commande dans le module. Pour plus d'informations sur un type de tâche personnalisé particulier, consultez la documentation sur la fonctionnalité de type de tâche personnalisé.

Exemples

Exemple 1 : Obtenir des résultats pour un travail particulier

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

Ces commandes utilisent le paramètre Job de Receive-Job pour obtenir les résultats d’un travail particulier.

La première commande démarre un travail avec Start-Job et stocke l’objet de travail dans la $job variable.

La deuxième commande utilise l’applet Receive-Job de commande pour obtenir les résultats du travail. Elle utilise le paramètre Job pour spécifier la tâche.

Exemple 2 : Utiliser le paramètre Keep

$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

Cet exemple montre comment stocker un travail dans la $job variable et le rediriger vers l’applet de Receive-Job commande. Le -Keep paramètre est également utilisé pour permettre à toutes les données de flux agrégés d’être récupérées à nouveau après la première vue.

Exemple 3 : Obtenir les résultats de plusieurs travaux en arrière-plan

Lorsque vous utilisez le paramètre AsJob de Invoke-Command pour démarrer un travail, l’objet de travail est créé sur l’ordinateur local, même si le travail s’exécute sur les ordinateurs distants. Par conséquent, vous utilisez des commandes locales pour gérer la tâche.

En outre, lorsque vous utilisez AsJob, PowerShell retourne un objet de travail qui contient un travail enfant pour chaque travail démarré. Dans ce cas, l'objet de traitement contient trois tâches enfants, une pour chaque tâche sur chaque ordinateur distant.

# 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

Exemple 4 : Obtenir les résultats des travaux en arrière-plan sur plusieurs ordinateurs distants

# 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 creates a new job with a custom name to each server
# The job outputs the datetime from each server
# Save the job objects in the $j variable.
$j = Invoke-Command -Session $s -ScriptBlock {​Start-Job -Name $('MyJob-' +$env:COMPUTERNAME) -ScriptBlock {(Get-Date).ToString()​}​}
# 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    MyJob-Server01     Completed  True          Localhost  (Get-Date).ToString()
2    MyJob-Server02     Completed  True          Localhost  (Get-Date).ToString()
3    MyJob-Server03     Completed  True          Localhost  (Get-Date).ToString()

# 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 -Name $('MyJob-' +$env:COMPUTERNAME)}

3/22/2021 7:41:47 PM
3/22/2021 7:41:47 PM
3/22/2021 9:41:47 PM

Cet exemple montre comment obtenir les résultats des tâches en arrière-plan exécutées sur trois ordinateurs distants. Contrairement à l’exemple précédent, l’utilisation Invoke-Command de pour exécuter la Start-Job commande a en fait démarré trois travaux indépendants sur chacun des trois ordinateurs. Par conséquent, la commande a retourné trois objets de travail représentant trois tâches exécutées localement sur trois ordinateurs différents.

Exemple 5 : Accéder aux travaux enfants

Le -Keep paramètre conserve l’état des flux agrégés d’un travail afin qu’il puisse être à nouveau consulté. Sans ce paramètre, toutes les données de flux agrégés sont effacées lors de la réception du travail. Pour plus d’informations, consultez about_Job_Details

Notes

Les flux agrégés incluent les flux de tous les travaux enfants. Vous pouvez toujours atteindre les flux de données individuels via l’objet de travail et les objets de travail enfants.

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

Paramètres

-AutoRemoveJob

Indique que cette applet de commande supprime le travail après avoir retourné les résultats du travail. Si le travail a plus de résultats, le travail est toujours supprimé, mais Receive-Job affiche un message.

Ce paramètre fonctionne uniquement sur les types de tâches personnalisées. Il est conçu pour les instances de types de tâches qui enregistrent la tâche ou le type en dehors de la session, telles que les instances de tâches planifiées.

Ce paramètre ne peut pas être utilisé sans le paramètre Wait .

Ce paramètre a été introduit dans Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ComputerName

Spécifie un tableau de noms d’ordinateurs.

Ce paramètre procède à une sélection parmi les résultats des tâches stockés sur l'ordinateur local. Il n’obtient pas de données pour les travaux exécutés sur des ordinateurs distants. Pour obtenir les résultats du travail stockés sur des ordinateurs distants, utilisez l’applet de Invoke-Command commande pour exécuter une Receive-Job commande à distance.

Type:String[]
Aliases:Cn
Position:1
Default value:All computers available
Required:False
Accept pipeline input:True
Accept wildcard characters:True

-Force

Indique que cette applet de commande continue d’attendre si les travaux sont à l’état Suspendu ou Déconnecté . Par défaut, le paramètre Wait de Receive-Job renvoie ou met fin à l’attente lorsque les travaux se trouvent dans l’un des états suivants :

  • Completed
  • Échec
  • Arrêté
  • Interrompu
  • Déconnecté.

Le paramètre Force n'est valide que lorsque le paramètre Wait est également utilisé dans la commande.

Ce paramètre a été introduit dans Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Id

Spécifie un tableau d'ID. Cette applet de commande obtient les résultats des travaux avec les ID spécifiés.

L’ID est un entier qui identifie de manière unique le travail dans la session active. Il est plus facile de mémoriser et de taper que l’ID de instance, mais il n’est unique que dans la session active. Vous pouvez taper un ou plusieurs ID séparés par des virgules. Pour rechercher l’ID d’un travail, utilisez Get-Job.

Type:Int32[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-InstanceId

Spécifie un tableau d’ID de instance. Cette applet de commande obtient les résultats des travaux avec les ID de instance spécifiés.

Un ID d'instance est un GUID qui identifie de façon unique la tâche sur l'ordinateur. Pour rechercher l’ID de instance d’un travail, utilisez l’applet de Get-Job commande .

Type:Guid[]
Position:0
Default value:All instances
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Job

Spécifie la tâche pour laquelle les résultats sont récupérés.

Entrez une variable qui contient la tâche ou une commande qui obtient la tâche. Vous pouvez également diriger un objet de travail vers Receive-Job.

Type:Job[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Keep

Indique que cette applet de commande enregistre les données de flux agrégées dans le système, même après les avoir reçues. Par défaut, les données de flux agrégés sont effacées après avoir été consultées avec Receive-Job.

La fermeture de la session ou la suppression du travail avec l’applet de Remove-Job commande supprime également les données de flux agrégées.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Location

Spécifie un tableau d’emplacements. Cette applet de commande obtient uniquement les résultats des travaux dans les emplacements spécifiés.

Type:String[]
Position:1
Default value:All locations
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Name

Spécifie un tableau de noms conviviaux. Cette applet de commande obtient les résultats des travaux qui ont les noms spécifiés. Les caractères génériques sont pris en charge.

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-NoRecurse

Indique que cette applet de commande obtient uniquement les résultats du travail spécifié. Par défaut, Receive-Job obtient également les résultats de tous les travaux enfants du travail spécifié.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Session

Spécifie un tableau de sessions. Cette applet de commande obtient les résultats des travaux qui ont été exécutés dans la session PowerShell (PSSession) spécifiée. Entrez une variable qui contient la session PSSession ou une commande qui obtient la session PSSession, telle qu’une Get-PSSession commande.

Type:PSSession[]
Position:1
Default value:All sessions
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Wait

Indique que cette applet de commande supprime l’invite de commandes jusqu’à ce que tous les résultats du travail soient reçus. Par défaut, Receive-Job retourne immédiatement les résultats disponibles.

Par défaut, le paramètre Wait attend jusqu'à ce que la tâche soit dans l'un des états suivants :

  • Completed
  • Échec
  • Arrêté
  • Interrompu
  • Déconnecté.

Pour indiquer au paramètre Wait de continuer à attendre si l’état du travail est Suspendu ou Déconnecté, utilisez le paramètre Force avec le paramètre Wait .

Ce paramètre a été introduit dans Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WriteEvents

Indique que cette applet de commande signale des modifications dans l’état du travail pendant qu’elle attend la fin du travail.

Ce paramètre est valide uniquement quand le paramètre Wait est utilisé dans la commande et que le paramètre Keep est omis.

Ce paramètre a été introduit dans Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WriteJobInResults

Indique que cette applet de commande retourne l’objet de travail suivi des résultats.

Ce paramètre est valide uniquement quand le paramètre Wait est utilisé dans la commande et que le paramètre Keep est omis.

Ce paramètre a été introduit dans Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Entrées

Job

Vous pouvez diriger des objets de travail vers cette applet de commande.

Sorties

PSObject

Cette applet de commande retourne les résultats des commandes dans le travail.