Share via


about_Job_Details

Mis à jour: novembre 2012

S'applique à: Windows PowerShell 2.0, Windows PowerShell 3.0

RUBRIQUE

about_Job_Details

DESCRIPTION COURTE

Fournit des détails sur les tâches en arrière-plan sur les ordinateurs locaux et distants.

DESCRIPTION DÉTAILLÉE

Cette rubrique explique le concept de tâche en arrière-plan et fournit des informations techniques sur le fonctionnement des tâches en arrière-plan Windows PowerShell®.

Cette rubrique est un supplément aux rubriques about_Jobs et about_Remote_Jobs.

À PROPOS DES TÂCHES EN ARRIÈRE-PLAN

Une tâche en arrière-plan exécute une commande ou une expression de façon asynchrone. Elle peut exécuter une applet de commande, une fonction, un script ou tout autre travail basé sur des commandes. Elle est conçue pour exécuter des commandes qui prennent un certain temps, mais vous pouvez l’utiliser pour exécuter n’importe quelle commande en arrière-plan.

Lors de l’exécution d’une commande synchrone, l’invite de commandes Windows PowerShell est supprimée jusqu’à ce que la commande soit terminée. Une tâche en arrière-plan ne supprime cependant pas l’invite Windows PowerShell. Une commande pour démarrer une tâche arrière-plan retourne un objet de tâche. L’invite retourne immédiatement, et vous pouvez donc vous occuper d’autres travaux pendant l’exécution de la tâche en arrière-plan.

Cependant, quand vous démarrez une tâche en arrière-plan, vous n’obtenez pas les résultats immédiatement, même si la tâche s’exécute très rapidement. L’objet de tâche qui est retourné contient des informations utiles sur la tâche, mais il ne contient pas les résultats de la tâche. Vous devez exécuter une commande distincte pour obtenir les résultats de la tâche. Vous pouvez également exécuter des commandes pour arrêter la tâche, pour attendre que la tâche soit terminée et pour supprimer la tâche.

Pour rendre le déroulement dans le temps d’une tâche en arrière-plan indépendant des autres commandes, chaque tâche en arrière-plan s’exécute dans son propre environnement Windows PowerShell (une « session »). Cependant, il peut s’agir d’une connexion temporaire créée seulement pour exécuter la tâche et qui est ensuite détruite, ou il peut s’agir d’une session persistante (une session PowerShell) que vous pouvez utiliser pour exécuter plusieurs tâches ou commandes associées.

UTILISATION DES APPLETS DE COMMANDE DE TÂCHE

Utilisez une commande Start-Job pour démarrer une tâche en arrière-plan sur un ordinateur local. Start-Job retourne un objet de tâche. Vous pouvez également obtenir les objets représentant les tâches qui ont été démarrées sur l’ordinateur local à l’aide de l’applet de commande Get-Job.

Pour obtenir les résultats d’une tâche, utilisez l’applet de commande Receive-Job. Si la tâche n’est pas terminée, Receive-Job retourne des résultats partiels. Vous pouvez également utiliser l’applet de commande Wait-Job pour supprimer l’invite de commandes jusqu’à ce qu’une tâche ou toutes les tâches qui ont été démarrées dans la session soient terminées.

Pour arrêter une tâche en arrière-plan, utilisez l’applet de commande Stop-Job. Pour supprimer une tâche, utilisez l’applet de commande Remove-Job.

Pour plus d’informations sur le fonctionnement des applets de commande, consultez la rubrique d’aide pour chaque applet de commande, ainsi que about_Jobs.

DÉMARRAGE DE TÂCHES EN ARRIÈRE-PLAN SUR DES ORDINATEURS DISTANTS

Vous pouvez créer et gérer des tâches en arrière-plan sur un ordinateur local ou distant. Pour exécuter une tâche en arrière-plan à distance, utilisez le paramètre AsJob d’une applet de commande comme Invoke-Command, ou utilisez l’applet de commande Invoke-Command pour exécuter une commande Start-Job à distance. Vous pouvez également démarrer une tâche en arrière-plan dans une session interactive.

Pour plus d’informations sur les tâches distantes en arrière-plan, consultez about_Remote_Jobs.

TÂCHES ENFANTS

Chaque tâche en arrière-plan se compose d’une tâche parent et d’un ou plusieurs tâches enfants. Dans les tâches démarrées en utilisant Start-Job ou le paramètre AsJob de Invoke-Command, la tâche parent joue un rôle d’encadrement. Elle n’exécute aucune commande et ne retourne aucun résultat. Les commandes sont en fait exécutées par les tâches enfants. (Les tâches démarrées à l’aide d’autres applets de commande peuvent fonctionner différemment.)

Les tâches enfants sont stockées dans la propriété ChildJobs de l’objet de tâche parent. La propriété ChildJobs peut contenir un ou plusieurs objets de tâche enfant. Les objets de tâche enfant ont un nom, un ID et un ID d’instance qui diffèrent de ceux de la tâche parent : vous pouvez donc gérer les tâches parents et les tâches enfants individuellement ou comme une unité.

Pour obtenir les tâches parent et enfants d’une tâche, utilisez le paramètre IncludeChildJobs de l’applet de commande Get-Job. Le paramètre IncludeChildJob a été introduit dans Windows PowerShell 3.0.

        C:\PS> Get-Job -IncludeChildJob

        Id    Name   PSJobTypeName State      HasMoreData   Location    Command
        --    ----   ------------- -----      -----------   --------    -------
        1     Job1   RemoteJob     Failed     True          localhost   Get-Process
        2     Job2                 Completed  True          Server01    Get-Process
        3     Job3                 Failed     False         localhost   Get-Process

Pour obtenir la tâche parent et seulement les tâches enfants avec une valeur d’état particulière, utilisez le paramètre ChildJobState de l’applet de commande Get-Job. Le paramètre ChildJobState a été introduit dans Windows PowerShell 3.0.

        C:\PS> Get-Job -ChildJobState Failed

        Id    Name   PSJobTypeName State      HasMoreData   Location    Command
        --    ----   ------------- -----      -----------   --------    -------
        1     Job1   RemoteJob     Failed     True          localhost   Get-Process
        3     Job3                 Failed     False         localhost   Get-Process

Pour obtenir les tâches enfants d’une tâche sur toutes les versions de Windows PowerShell, utilisez la propriété ChildJob de la tâche parent.

        C:\PS> (Get-Job Job1).ChildJobs

        Id    Name   PSJobTypeName State      HasMoreData   Location    Command
        --    ----   ------------- -----      -----------   --------    -------
        2     Job2                 Completed  True          Server01    Get-Process
        3     Job3                 Failed     False         localhost   Get-Process

Vous pouvez également utiliser une commande Get-Job sur la tâche enfant, comme le montre la commande suivante :

        C:\PS> Get-Job Job3

        Id    Name   PSJobTypeName State      HasMoreData   Location    Command
        --    ----   ------------- -----      -----------   --------    -------
        3     Job3                 Failed     False         localhost   Get-Process

La configuration de la tâche enfant dépend de la commande que vous utilisez pour démarrer la tâche.

Quand vous utilisez Start-Job pour démarrer une tâche sur un ordinateur local, la tâche se compose d’une tâche parent d’encadrement et d’une tâche enfant qui exécute la commande.

Quand vous utilisez le paramètre AsJob de Invoke-Command pour démarrer une tâche sur un ou plusieurs ordinateurs, la tâche se compose d’une tâche parent d’encadrement et d’une tâche enfant pour chaque tâche exécutée sur chaque ordinateur.

Quand vous utilisez Invoke-Command pour exécuter une commande Start-Job sur un ou plusieurs ordinateurs distants, le résultat est identique à celui d’une commande locale sur chaque ordinateur distant. La commande retourne un objet de tâche pour chaque ordinateur. L’objet de tâche se compose d’une tâche parent d’encadrement et d’une tâche enfant qui exécute la commande.

La tâche parent représente toutes les tâches enfants. Quand vous gérez une tâche parent, vous gérez également les tâches enfants associées. Par exemple, si vous arrêtez une tâche parent, toutes les tâches enfants sont arrêtées. Si vous obtenez les résultats d’une tâche parent, vous obtenez les résultats de toutes les tâches enfants.

Cependant, vous pouvez également gérer les tâches enfants individuellement. Ceci est particulièrement utile quand vous voulez étudier un problème rencontré avec une tâche ou obtenir les résultats d’une seule des tâches enfants démarrées en utilisant le paramètre AsJob de Invoke-Command. (Le caractère accent grave [`] est le caractère de continuation.)

La commande suivante utilise le paramètre AsJob de Invoke-Command pour démarrer des tâches en arrière-plan sur l’ordinateur local et sur deux ordinateurs distants. La commande enregistre la tâche dans la variable $j.

        PS C:> $j = Invoke-Command -ComputerName localhost, Server01, Server02 `
               -Command {Get-Date} -AsJob

Quand vous affichez les propriétés Name et ChildJob de la tâche dans $j, cela montre que la commande a retourné un objet de tâche avec trois tâches enfants, une pour chaque ordinateur.

        CPS C:> $j | Format-List Name, ChildJobs

        Name      : Job3
        ChildJobs : {Job4, Job5, Job6}

Quand vous affichez la tâche parent, cela montre que la tâche a échoué.

        C:\PS> $j

        Id    Name   PSJobTypeName State      HasMoreData   Location    
        --    ----   ------------- -----      -----------   --------   
        3     Job3   RemotingJob   Failed     False         localhost,Server...

Cependant, quand vous exécutez une commande Get-Job qui obtient les tâches enfants, la sortie montre que seule une tâche enfant a échoué.

        PS C:\> Get-Job -IncludeChildJobs

        Id    Name   PSJobTypeName State      HasMoreData   Location    Command
        --    ----   ------------- -----      -----------   --------    -------
        3     Job3   RemotingJob   Failed     False         localhost,Server...
        4     Job4                 Completed  True          localhost   Get-Date
        5     Job5                 Failed     False         Server01    Get-Date
        6     Job6                 Completed  True          Server02    Get-Date

Pour obtenir les résultats de toutes les tâches enfants, utilisez l’applet de commande Receive-Job pour obtenir les résultats de la tâche parent. Vous pouvez cependant aussi obtenir les résultats d’une tâche enfant particulière, comme le montre la commande suivante.

        C:\PS> Receive-Job -Name Job6 -Keep | Format-Table ComputerName, DateTime -Auto

        ComputerName DateTime
        ------------ --------
        Server02     Thursday, March 13, 2008 4:16:03 PM

Les tâches enfants des tâches en arrière-plan de Windows PowerShell vous donnent davantage de contrôle sur les tâches que vous exécutez.

TYPES DE TÂCHES

Windows PowerShell prend en charge différents types de tâches pour différents travaux. À compter de Windows PowerShell 3.0, les développeurs peuvent écrire des « adaptateurs de source de tâche » qui ajoutent de nouveaux types de tâches à Windows PowerShell et qui incluent les adaptateurs de source de tâche dans des modules. Quand vous importez le module, vous pouvez utiliser le nouveau type de tâche dans votre session.

Par exemple, le module PSScheduledJob ajoute des tâches planifiées et le module PSWorkflow ajoute des tâches de workflow.

Les types de tâches personnalisés peuvent différer considérablement des tâches en arrière-plan standard de Windows PowerShell. Par exemple, les tâches planifiées sont enregistrées sur disque ; elles n’existent pas seulement dans une session particulière. Les tâches de workflow peuvent être mises en suspens et reprises.

Les applets de commande que vous utilisez pour gérer les tâches personnalisées varient selon le type de tâche. Pour certains, vous utilisez les applets de commande de tâche standard, comme Get-Job et Start-Job. D’autres sont fournis avec des applets de commande spécialisées qui gèrent seulement un type particulier de tâche. Pour plus d’informations sur les types de tâches personnalisés, consultez les rubriques d’aide sur le type de tâche.

Pour trouver le type de tâche d’une tâche, utilisez l’applet de commande Get-Job. Get-Job retourne des objets de tâche différents pour les différents types de tâches. La valeur de la propriété PSJobTypeName des objets de tâche retournés par Get-Job indique le type de tâche.

Le tableau suivant répertorie les types de tâches qui sont prédéfinis dans Windows PowerShell.

      Job Type         Description
      --------         -----------
      BackgroundJob    Started by using the Start-Job cmdlet.
      RemoteJob        Started by using the AsJob parameter of the 
                       Invoke-Command cmdlet.
      PSWorkflowJob    Started by using the AsJob parameter of a
                       workflow.
      PSScheduledJob   An instance of a scheduled job started by
                       a job trigger.
      CIMJob           Started by using the AsJob parameter of 
                       a cmdlet from a CDXML module.
      WMIJob           Started by using the AsJob parameter of 
                       a cmdlet from a WMI module.
      PSEventJob       Created by running Register-ObjectEvent 
                       and specifying an action with the Action
                       parameter.

REMARQUE :

Avant d’utiliser l’applet de commande Get-Job pour obtenir les tâches d’un type particulier, vérifiez que le module qui ajoute le type de tâche est importé dans la session active. Sinon, Get-Job n’obtient pas les tâches de ce type.

EXEMPLE

Les commandes suivantes créent une tâche locale en arrière-plan, une tâche distante en arrière-plan, une tâche de workflow et une tâche planifiée. Il utilise ensuite l’applet de commande Get-Job pour obtenir les tâches. Get-Job n’obtient pas la tâche planifiée, mais il obtient toutes les instances démarrées de la tâche planifiée.

    # Start a background job on the local computer.
    PS C:\> Start-Job -Name LocalData {Get-Process}

    Id   Name        PSJobTypeName   State   HasMoreData     Location   Command
    --   ----        -------------   -----   -----------     --------   -------
    2    LocalData   BackgroundJob   Running        True     localhost  Get-Process
    # Start a background job that runs on a remote computer.
    PS C:\> Invoke-Command -ComputerName Server01 {Get-Process} -AsJob -JobName RemoteData

    Id   Name        PSJobTypeName   State   HasMoreData     Location   Command
    --   ----        -------------   -----   -----------     --------   -------
    2    RemoteData  RemoteJob       Running        True     Server01   Get-Process
    # Create a scheduled job
    PS C:\>  Register-ScheduledJob -Name ScheduledJob -ScriptBlock {Get-Process} `
             -Trigger (New-JobTrigger -Once -At "3 PM")

    Id         Name            JobTriggers     Command       Enabled
    --         ----            -----------     -------       -------
    1          ScheduledJob    1               Get-Process   True
    # Create a workflow. 
    PS C:\> workflow Test-Workflow {Get-Process}

    # Run the workflow as a job.
    PS C:\> Test-Workflow -AsJob -JobName TestWFJob

    Id   Name        PSJobTypeName   State   HasMoreData     Location   Command
    --   ----        -------------   -----   -----------     --------   -------
    2    TestWFJob   PSWorkflowJob   NotStarted     True     localhost  Get-Process
    # Get the jobs. The Get-Job command does not get scheduled jobs, but it gets
      instances of the scheduled job that are started.

    PS C:\> Get-Job

    Id   Name         PSJobTypeName   State     HasMoreData     Location  Command
    --   ----         -------------   -----     -----------     --------  -------
    2    LocalData    BackgroundJob   Completed True            localhost Get-Process
    4    RemoteData   RemoteJob       Completed True            Server01  Get-Process
    6    TestWFJob    PSWorkflowJob   Completed True            localhost WorkflowJob
    8    ScheduledJob PSScheduledJob  Completed True            localhost Get-Process
    # To get scheduled jobs, use the Get-ScheduledJob cmdlet.
    PS C:\> Get-ScheduledJob

    Id         Name            JobTriggers     Command       Enabled
    --         ----            -----------     -------       -------
    1          ScheduledJob    1               Get-Process   True

VOIR AUSSI

about_Jobs

about_Remote_Jobs

about_Remote

about_Scheduled_Jobs

Invoke-Command

Start-Job

Get-Job

Wait-Job

Stop-Job

Remove-Job

Suspend-Job

Resume-Job

New-PSSession

Enter-PSSession

Exit-PSSession

Register-ScheduledJob

Get-ScheduleJob