RUBRIQUE
    about_Remote_Jobs

DESCRIPTION COURTE
    Décrit comment exécuter des tâches en arrière-plan sur les 
    ordinateurs distants.

DESCRIPTION DÉTAILLÉE
    Une tâche en arrière-plan est une commande qui s'exécute de façon 
    asynchrone sans interagir avec la session active. L'invite de 
    commandes se réaffiche immédiatement et vous pouvez continuer à 
    utiliser la session pendant que la tâche s'exécute.

    Par défaut, les tâches en arrière-plan s'exécutent sur 
    l'ordinateur local. Toutefois, vous pouvez utiliser plusieurs 
    procédures différentes pour les exécuter sur les ordinateurs 
    distants. 

    Cette rubrique explique comment exécuter une tâche en 
    arrière-plan sur un ordinateur distant. Pour plus d'informations 
    sur l'exécution des tâches en arrière-plan sur un ordinateur 
    local, consultez about_Jobs. Pour plus d'informations sur les 
    tâches en arrière-plan, consultez about_Job_Details.


 TÂCHES EN ARRIÈRE-PLAN DISTANTES

    Vous pouvez exécuter des tâches en arrière-plan sur les 
    ordinateurs distants à l'aide de trois méthodes différentes. 

    -- Démarrer une session interactive avec un ordinateur distant, 
       puis démarrer une tâche dans la session interactive. Les 
       procédures sont les mêmes que pour l'exécution d'une tâche 
       locale, même si toutes les actions sont effectuées sur 
       l'ordinateur distant.

    -- Exécuter une tâche en arrière-plan sur un ordinateur distant 
       qui retourne ses résultats à l'ordinateur local. Utilisez 
       cette méthode lorsque vous souhaitez rassembler les résultats 
       des tâches en arrière-plan et les gérer dans un emplacement 
       central sur l'ordinateur local.

    -- Exécuter une tâche en arrière-plan sur un ordinateur distant 
       qui gère ses résultats sur l'ordinateur distant. Utilisez 
       cette méthode lorsque les données de la tâche sont gérées de 
       façon plus sécurisée sur l'ordinateur d'origine.  

 DÉMARRER UNE TÂCHE EN ARRIÈRE-PLAN DANS UNE SESSION INTERACTIVE

    Vous pouvez démarrer une session interactive avec un ordinateur 
    distant, puis démarrer une tâche en arrière-plan pendant la 
    session interactive. Pour plus d'informations sur les sessions 
    interactives, consultez about_Remote et Enter-PSSession.

    La procédure permettant de démarrer une tâche en arrière-plan 
    dans une session interactive est presque identique à celle du 
    démarrage d'une tâche en arrière-plan sur l'ordinateur local. 
    Toutefois, toutes les opérations se produisent sur l'ordinateur 
    distant, et non sur l'ordinateur local.


    ÉTAPE 1 : ENTER-PSSESSION

    Utilisez l'applet de commande Enter-PSSession pour démarrer une 
    session interactive avec un ordinateur distant. Vous pouvez 
    utiliser le paramètre ComputerName de l'applet de commande 
    Enter-PSSession pour établir une connexion temporaire pour la 
    session interactive. Vous pouvez également utiliser le paramètre 
    Session pour exécuter la session interactive dans une session 
    Windows PowerShell (PSSession). 

    La commande suivante démarre une session interactive sur 
    l'ordinateur Server01.
  
        C:\PS> Enter-PSSession -computername Server01

    L'invite de commandes change pour indiquer que vous êtes 
    maintenant connecté à l'ordinateur Server01.

        Server01\C:>


    ÉTAPE 2 : START-JOB

    Pour démarrer une tâche en arrière-plan dans la session, 
    utilisez l'applet de commande Start-Job.

    La commande suivante exécute une tâche en arrière-plan qui 
    obtient les événements dans le journal des événements Windows 
    PowerShell sur l'ordinateur Server01. L'applet de commande 
    Start-Job retourne un objet qui représente la tâche. 

    Cette commande enregistre l'objet de traitement dans la 
    variable $job. 

        Server01\C:> $job = start-job -scriptblock {get-eventlog "Windows PowerShell"}
   
    Pendant l'exécution de la tâche, vous pouvez utiliser la session 
    interactive pour exécuter d'autres commandes, notamment d'autres 
    tâches en arrière-plan. Toutefois, la session interactive doit 
    rester ouverte jusqu'à la fin de la tâche. Si vous mettez fin à 
    la session, la tâche est interrompue et les résultats sont perdus.



    ÉTAPE 3 : GET-JOB

    Pour déterminer si la tâche est terminée, affichez la valeur de 
    la variable $job ou utilisez l'applet de commande Get-Job pour 
    obtenir la tâche. La commande suivante utilise l'applet de 
    commande Get-Job pour afficher la tâche.

        Server01\C:> get-job $job

        SessionId  Name  State      HasMoreData  Location   Command
        ---------  ----  -----      -----------  --------   -------
        1          Job1  Complete   True         localhost  get-eventlog "Windows PowerShell"
   
    La sortie Get-Job indique que la tâche est exécutée sur 
    l'ordinateur " localhost ", car elle a été démarrée et est 
    exécutée sur le même ordinateur (dans ce cas, Server01).
    


    ÉTAPE 4 : RECEIVE-JOB

    Pour obtenir les résultats de la tâche, utilisez l'applet de 
    commande Receive-Job. Vous pouvez afficher les résultats dans la 
    session interactive ou les enregistrer dans un fichier sur 
    l'ordinateur distant. La commande suivante obtient les résultats 
    de la tâche dans la variable $job. La commande utilise 
    l'opérateur de redirection (>) pour enregistrer les résultats de 
    la tâche dans le fichier PsLog.txt sur l'ordinateur Server01.

        Server01\C:> receive-job $job > c:\logs\PsLog.txt



    ÉTAPE 5 : EXIT-PSSESSION

    Pour mettre fin à la session interactive, utilisez l'applet de 
    commande Exit-PSSession. L'invite de commandes change pour 
    indiquer que vous êtes de retour dans la session d'origine sur 
    l'ordinateur local.

        Server01\C:> Exit-PSSession
        C:\PS>
         


    ÉTAPE 6 : INVOKE-COMMAND: GET-CONTENT
     
    Pour afficher à tout moment le contenu du fichier PsLog.txt sur 
    l'ordinateur Server01, démarrez une autre session interactive ou 
    exécutez une commande distante. Ce type de commande convient le 
    mieux dans une session PSSession (connexion permanente) si vous 
    souhaitez utiliser plusieurs commandes pour rechercher et gérer 
    les données dans le fichier PsLog.txt. Pour plus d'informations 
    sur les sessions PSSession, consultez about_PSSessions.

    Les commandes suivantes utilisent l'applet de commande 
    New-PSSession pour créer une session PSSession connectée à 
    l'ordinateur Server01 et l'applet de commande Invoke-Command pour 
    exécuter une commande Get-Content dans la session PSSession pour 
    afficher le contenu du fichier.

        C:\PS> $s = new-pssession -computername Server01
        C:\PS> invoke-command -session $s -scriptblock {get-content c:\logs\pslog.txt}


       
 DÉMARRER UNE TÂCHE DISTANTE QUI RETOURNE LES RÉSULTATS À 
 L'ORDINATEUR LOCAL (ASJOB)

    Pour démarrer une tâche en arrière-plan sur un ordinateur distant 
    qui retourne les résultats de la commande à l'ordinateur local, 
    utilisez le paramètre AsJob d'une applet de commande, par exemple 
    Invoke-Command. 

    Lorsque vous utilisez le paramètre AsJob, l'objet de traitement 
    est en fait créé sur l'ordinateur local, bien que la tâche 
    s'exécute sur l'ordinateur distant. Lorsque la tâche est 
    terminée, les résultats sont retournés à l'ordinateur local. 

    Vous pouvez utiliser les applets de commande qui contiennent le 
    nom Job (applets de commande Job) pour gérer n'importe quelle 
    tâche créée par une applet de commande. La plupart des applets de 
    commande avec des paramètres AsJob n'utilisant pas la 
    communication à distance Windows PowerShell, vous pouvez les 
    utiliser même sur les ordinateurs qui ne sont pas configurés pour 
    la communication à distance et ne répondent pas aux conditions de 
    la communication à distance.
 

    ÉTAPE 1 : INVOKE-COMMAND -ASJOB

    La commande suivante utilise le paramètre AsJob de l'applet de 
    commande Invoke-Command pour démarrer une tâche en arrière-plan 
    sur l'ordinateur Server01. La tâche exécute une commande 
    Get-Eventlog qui obtient les événements dans le journal System. 
    Vous pouvez utiliser le paramètre JobName pour attribuer un nom 
    d'affichage à la tâche.

       invoke-command -computername Server01 -scriptblock {get-eventlog system} -asjob 

    Les résultats de la commande ressemblent à l'exemple de sortie 
    suivant.


       SessionId   Name    State      HasMoreData     Location   Command
       ---------   ----    -----      -----------     --------   -------
       1           Job1    Running    True            Server01   get-eventlog system

    Lorsque le paramètre AsJob est utilisé, Invoke-Command retourne 
    le même type d'objet de traitement que Start-Job. Vous pouvez 
    enregistrer l'objet de traitement dans une variable ou utiliser 
    une commande Get-Job pour obtenir la tâche.

    Notez que la valeur de la propriété Location indique que la tâche 
    a été exécutée sur l'ordinateur Server01.  


    ÉTAPE 2 : GET-JOB

    Pour gérer une tâche démarrée à l'aide du paramètre AsJob de 
    l'applet de commande Invoke-Command, utilisez les applets de 
    commande Job. Étant donné que l'objet de traitement qui 
    représente la tâche distante se trouve sur l'ordinateur local, 
    vous n'avez pas besoin d'exécuter des commandes distantes pour 
    gérer la tâche.  

    Pour déterminer si la tâche est terminée, utilisez une commande 
    Get-Job. La commande suivante obtient toutes les tâches démarrées 
    dans la session active. 

        get-job

    Étant donné que la tâche distante a été démarrée dans la session 
    active, une commande Get-Job locale obtient la tâche. La propriété 
    State de l'objet de traitement indique que la commande a été exécutée 
    avec succès.
       
       SessionId   Name   State      HasMoreData     Location   Command
       ---------   ----   -----      -----------     --------   -------
       1           Job1   Completed  True            Server01   get-eventlog system


    ÉTAPE 3 : RECEIVE-JOB

    Pour obtenir les résultats de la tâche, utilisez l'applet de 
    commande Receive-Job. Dans la mesure où les résultats de la tâche 
    sont automatiquement retournés à l'ordinateur sur lequel l'objet 
    de traitement se trouve, vous pouvez obtenir les résultats avec 
    une commande Receive-Job locale.

    La commande suivante utilise l'applet de commande Receive-Job 
    pour obtenir les résultats de la tâche. Elle utilise l'ID de 
    session pour identifier la tâche. Cette commande enregistre les 
    résultats de la tâche dans la variable $results. Vous pouvez 
    également rediriger les résultats vers un fichier.

       $results = receive-job -id 1
    


 DÉMARRER UNE TÂCHE DISTANTE QUI CONSERVE LES RÉSULTATS SUR L'ORDINATEUR DISTANT

    Pour démarrer une tâche en arrière-plan sur un ordinateur distant 
    qui conserve les résultats de la commande sur l'ordinateur 
    distant, utilisez l'applet de commande Invoke-Command pour 
    exécuter une commande Start-Job sur un ordinateur distant. 
    Vous pouvez utiliser cette méthode pour exécuter des tâches 
    en arrière-plan sur plusieurs ordinateurs.

    Lorsque vous exécutez une commande Start-Job à distance, l'objet 
    de traitement est créé sur l'ordinateur distant et les résultats 
    de la tâche sont gérés sur l'ordinateur distant. Du point de vue 
    de la tâche, toutes les opérations sont locales. Vous exécutez 
    simplement les commandes à distance pour gérer une tâche locale 
    sur l'ordinateur distant.


    ÉTAPE 1 : INVOKE-COMMAND START-JOB

    Utilisez l'applet de commande Invoke-Command pour exécuter une 
    commande Start-Job sur un ordinateur distant. 

    Cette commande requiert une session PSSession (connexion 
    permanente). Si vous utilisez le paramètre ComputerName de 
    l'applet de commande Invoke-Command pour établir une connexion 
    temporaire, la commande Invoke-Command est considérée comme 
    terminée lorsque l'objet de traitement est retourné. En 
    conséquence, la connexion temporaire est fermée et la tâche est 
    annulée.
 
    La commande suivante utilise l'applet de commande New-PSSession 
    pour créer une session PSSession qui est connectée à l'ordinateur 
    Server01. La commande enregistre la session PSSession dans la 
    variable $s.

        $s = new-pssession -computername Server01


    La commande suivante utilise l'applet de commande Invoke-Command 
    pour exécuter une commande Start-Job dans la session PSSession. 
    Les commandes Start-Job et Get-Eventlog sont placées entre accolades.

       invoke-command -session $s -scriptblock {start-job -scriptblock {get-eventlog system}}

    Les résultats ressemblent à l'exemple de sortie suivant.


       Id       Name    State      HasMoreData     Location   Command
       --       ----    -----      -----------     --------   -------
       2        Job2    Running    True            Localhost  get-eventlog system

    Lorsque vous exécutez une commande Start-Job à distance, 
    Invoke-Command retourne le même type d'objet de traitement que 
    Start-Job. Vous pouvez enregistrer l'objet de traitement dans une 
    variable ou utiliser une commande Get-Job pour obtenir la tâche.

    Notez que la valeur de la propriété Location indique que la tâche 
    a été exécutée sur l'ordinateur local, appelé " LocalHost ", même 
    si elle a été exécutée sur l'ordinateur Server01. Étant donné que 
    l'objet de traitement est créé sur l'ordinateur Server01 et que 
    la tâche s'exécute sur le même ordinateur, elle est considérée 
    comme une tâche en arrière-plan locale.  


    ÉTAPE 2 : INVOKE-COMMAND GET-JOB

    Pour gérer une tâche en arrière-plan distante, utilisez les 
    applets de commande Job. Étant donné que l'objet de traitement 
    est sur l'ordinateur distant, vous devez exécuter des commandes 
    distantes pour obtenir, arrêter, attendre ou récupérer les 
    résultats de la tâche.  

    Pour savoir si la tâche est terminée, utilisez une commande 
    Invoke-Command pour exécuter une commande Get-Job dans la session 
    PSSession connectée à l'ordinateur Server01.

        invoke-command -session $s -scriptblock {get-job}

    La commande retourne un objet de traitement. La propriété State 
    de l'objet de traitement indique que la commande a été exécutée 
    avec succès. 

       SessionId       Name    State      HasMoreData     Location   Command
       ---------       ----    -----      -----------     --------   -------
       2               Job2    Completed  True            LocalHost   get-eventlog system


    ÉTAPE 3 : INVOKE-COMMAND RECEIVE-JOB

    Pour obtenir les résultats de la tâche, utilisez l'applet de 
    commande Invoke-Command pour exécuter une commande Receive-Job 
    dans la session PSSession connectée à l'ordinateur Server01.

    La commande suivante utilise l'applet de commande Receive-Job 
    pour obtenir les résultats de la tâche. Elle utilise l'ID de 
    session pour identifier la tâche. Cette commande enregistre les 
    résultats de la tâche dans la variable $results. Elle utilise le 
    paramètre Keep de Receive-Job pour conserver le résultat dans le 
    cache de tâches sur l'ordinateur distant.

        $results = invoke-command -session $s -scriptblock {receive-job -sessionid 2 -keep}

    Vous pouvez également rediriger les résultats vers un fichier sur 
    l'ordinateur local ou distant. La commande suivante utilise un 
    opérateur de redirection pour enregistrer les résultats dans un 
    fichier sur l'ordinateur Server01.

        invoke-command -session $s -command {receive-job -sessionid 2 > c:\logs\pslog.txt}


VOIR AUSSI
    about_Jobs
    about_Job_Details
    about_Remote
    Invoke-Command
    Start-Job
    Get-Job
    Wait-Job
    Stop-Job
    Remove-Job
    New-PSSession
    Enter-PSSession
    Exit-PSSession




Table des matières