RUBRIQUE
about_Job_Details
DESCRIPTION COURTE
Fournit des détails sur les tâches en arrière-plan des ordinateurs
locaux et distants.
DESCRIPTION DÉTAILLÉE
Cette rubrique explique ce qu'est une tâche en arrière-plan et
fournit des informations techniques sur le fonctionnement de ce
type de tâche dans Windows PowerShell.
Cette rubrique vient compléter les rubriques about_Jobs et
about_Remote_Jobs.
Important : les tâches en arrière-plan démarrées à l'aide de
Start-Job ou du paramètre AsJob de Invoke-Command
reposent sur l'infrastructure de communication à
distance Windows PowerShell. Pour utiliser ces
fonctionnalités, Windows PowerShell doit être
configuré pour la communication à distance,
même si la tâche en arrière-plan s'exécute
uniquement sur l'ordinateur local. Pour plus
d'informations, consultez about_Remote_Requirements.
À 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 toute autre tâche basée sur une
commande. Elle est conçue pour exécuter des commandes qui
prennent un certain temps, mais vous pouvez l'utiliser pour
exécuter tout type de commande à l'arrière-plan.
Lorsqu'une commande synchrone s'exécute, l'invite de commandes de
Windows PowerShell est supprimée jusqu'à ce que la commande soit
terminée. À l'inverse, une tâche en arrière-plan ne supprime pas
l'invite Windows PowerShell. Une commande servant à démarrer une
tâche en arrière-plan retourne un objet de traitement. L'invite
se réaffiche immédiatement pour que vous puissiez travailler sur
d'autres tâches pendant que la tâche en arrière-plan s'exécute.
Toutefois, lorsque vous démarrez une tâche en arrière-plan, vous
n'obtenez pas immédiatement les résultats même si elle s'exécute très
rapidement. L'objet de traitement retourné contient des informations
utiles sur la tâche, mais ne contient pas les résultats de la tâche.
Vous devez exécuter une commande distincte pour obtenir les résultats
de tâche. Vous pouvez également exécuter des commandes pour arrêter
la tâche, pour attendre qu'elle soit terminée et pour la supprimer.
Pour que l'horloge d'une tâche en arrière-plan soit indépendante
des autres commandes, chaque tâche en arrière-plan s'exécute dans
son propre environnement Windows PowerShell (" session ").
Toutefois, il peut s'agir d'une connexion temporaire créée
uniquement pour exécuter la tâche ou d'une session permanente
(PSSession) que vous pouvez utiliser pour exécuter plusieurs tâches ou
commandes connexes.
UTILISATION DES APPLETS DE COMMANDE JOB
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 traitement. Vous pouvez également obtenir des objets représentant
les tâches 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 la 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 ou toutes les tâches 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 de chaque applet et 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 telle
que 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 en arrière-plan à
distance, consultez about_Remote_Jobs.
TÂCHES ENFANTS
Chaque tâche en arrière-plan comporte une tâche parent et une ou
plusieurs tâches enfants. Dans les tâches démarrées à l'aide de
Start-Job ou du paramètre AsJob de Invoke-Command, la tâche
parent est une tâche exécutive. Elle n'exécute pas de commande et
ne retourne aucun résultat. Les commandes sont 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 traitement parent. La propriété ChildJobs peut
contenir un ou plusieurs objets de traitement enfants. Les objets de
traitement enfants ont un nom, un ID et un ID d'instance différents
de ceux de la tâche parent pour que vous puissiez gérer les tâches
parent et enfants individuellement ou en tant qu'unité.
Pour afficher les tâches parent et enfants d'une tâche, utilisez
l'applet de commande Get-Job pour obtenir la tâche parent, puis
redirigez la tâche vers une commande Format-List affichant les
propriétés Name et ChildJobs des objets, comme indiqué dans la
commande suivante.
C:\PS> get-job | format-list -property Name, ChildJobs
Name : Job1
ChildJobs : {Job2}
Vous pouvez également utiliser une commande Get-Job sur la tâche
enfant, comme indiqué dans la commande suivante :
C:\PS> get-job job2
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
2 Job2 Completed True localhost get-process
La configuration de la tâche enfant dépend de la commande que
vous utilisez pour la démarrer.
-- Lorsque vous utilisez Start-Job pour démarrer une tâche sur un
ordinateur local, la tâche comporte une tâche parent exécutive
et une tâche enfant qui exécute la commande.
-- Lorsque vous utilisez le paramètre AsJob de Invoke-Command
pour démarrer une tâche sur un ou plusieurs ordinateurs, la
tâche comporte une tâche parent exécutive et une tâche
enfant pour chaque tâche exécutée sur chaque ordinateur.
-- Lorsque vous utilisez Invoke-Command pour exécuter une
commande Start-Job sur un ou plusieurs ordinateurs
distants, le résultat est le même que pour une commande
locale exécutée sur chaque ordinateur distant. La commande
retourne un objet de traitement pour chaque ordinateur.
L'objet de traitement comporte une tâche parent exécutive
et une tâche enfant qui exécute la commande.
La tâche parent représente toutes les tâches enfants. Lorsque
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.
Toutefois, vous pouvez également gérer des tâches enfants
individuellement. Cette opération est très utile lorsque vous
souhaitez examiner un problème sur une tâche ou obtenir les
résultats d'une seule tâche enfant démarrée à l'aide du paramètre
AsJob de Invoke-Command. (Le backtick [`], ou 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 deux
ordinateurs distants. Elle enregistre la tâche dans la variable $j.
C:\PS> $j = invoke-command -computername localhost, Server01, Server02 `
-command {get-date} -AsJob
Lorsque vous affichez les propriétés Name et ChildJob de la tâche
de $j, elles indiquent que la commande a retourné un objet de
traitement avec trois tâches enfants, soit une pour chaque ordinateur.
C:\PS> $j | format-list name, childjobs
Name : Job3
ChildJobs : {Job4, Job5, Job6}
Lorsque vous affichez la tâche parent, elle indique que la tâche
a échoué.
C:\PS> $j
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 Job3 Failed True localhost,server... get-date
En revanche, lorsque vous exécutez une commande Get-Job sur
chacune des tâches enfants, elle indique qu'une seule tâche a échoué.
PS C:\ps-test> get-job job4, job5, job6
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
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 afin d'obtenir les résultats de
la tâche parent. Toutefois, vous pouvez également obtenir les
résultats d'une tâche enfant précise, comme indiqué dans la
commande suivante.
C:\PS> receive-job -job6 -keep | format-table ComputerName,
DateTime -auto
ComputerName DateTime
------------ --------
Server02 Jeudi 13 mars 2008 16:16:03
La fonctionnalité de tâches enfants des tâches en arrière-plan
Windows PowerShell vous permet de contrôler davantage les tâches
que vous exécutez.
VOIR AUSSI
about_Jobs
about_Remote_Jobs
about_Remote
Invoke-Command
Start-Job
Get-Job
Wait-Job
Stop-Job
Remove-Job
New-PSSession
Enter-PSSession
Exit-PSSession