Wait-Job
Attend qu’un ou tous les travaux PowerShell en cours d’exécution dans la session soient dans un état de fin.
Syntax
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Id] <Int32[]>
[<CommonParameters>]
Wait-Job
[-Job] <Job[]>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Name] <String[]>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-InstanceId] <Guid[]>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-State] <JobState>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Filter] <Hashtable>
[<CommonParameters>]
Description
L’applet Wait-Job
de commande attend qu’un travail soit dans un état de fin avant de poursuivre l’exécution.
Les états de fin sont les suivants :
- Completed
- Échec
- Arrêté
- Interrompu
- Déconnecté
Vous pouvez attendre qu’un travail spécifié, ou que tous les travaux soient dans un état de fin. Vous pouvez également définir un temps d’attente maximal pour le travail à l’aide du paramètre Timeout , ou utiliser le paramètre Force pour attendre un travail dans les Suspended
états ou Disconnected
.
Une fois les commandes du travail terminées, Wait-Job
retourne un objet de travail et poursuit l’exécution.
Vous pouvez utiliser l’applet Wait-Job
de commande pour attendre les travaux démarrés à l’aide de l’applet Start-Job
de commande ou du paramètre AsJob de l’applet Invoke-Command
de commande. Pour plus d’informations sur les tâches, consultez about_Jobs.
À compter de Windows PowerShell 3.0, l’applet Wait-Job
de commande attend également les types de travaux personnalisés, tels que les travaux de flux de travail et les instances de travaux planifiés. Pour permettre Wait-Job
d’attendre des travaux d’un type particulier, importez le module qui prend en charge le type de travail personnalisé dans la session avant d’exécuter l’applet Get-Job
de 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 : Attendre tous les travaux
Get-Job | Wait-Job
Cette commande attend que tous les travaux en cours d’exécution dans la session se terminent.
Exemple 2 : Attendre que les travaux démarrent sur des ordinateurs distants à l’aide de Start-Job
$s = New-PSSession Server01, Server02, Server03
Invoke-Command -Session $s -ScriptBlock {Start-Job -Name Date1 -ScriptBlock {Get-Date}}
$done = Invoke-Command -Session $s -Command {Wait-Job -Name Date1}
$done.Count
3
Cet exemple montre comment utiliser l’applet de commande avec des Wait-Job
travaux démarrés sur des ordinateurs distants à l’aide de l’applet de Start-Job
commande. Les Start-Job
commandes et Wait-Job
sont envoyées à l’ordinateur distant à l’aide de l’applet de Invoke-Command
commande .
Cet exemple utilise Wait-Job
pour déterminer si une Get-Date
commande exécutée en tant que travail sur trois ordinateurs différents est terminée.
La première commande crée une session Windows PowerShell (PSSession) sur chacun des trois ordinateurs distants et les stocke dans la $s
variable.
La deuxième commande utilise Invoke-Command
pour s’exécuter Start-Job
dans chacune des trois sessions dans $s
.
Tous les travaux sont nommés Date1.
La troisième commande utilise Invoke-Command
pour exécuter Wait-Job
. Cette commande attend que les Date1
travaux sur chaque ordinateur se terminent. Il stocke la collection obtenue (tableau) d’objets de travail dans la $done
variable.
La quatrième commande utilise la propriété Count du tableau d’objets de travail dans la $done
variable pour déterminer le nombre de travaux terminés.
Exemple 3 : Déterminer quand le premier travail se termine
$s = New-PSSession -ComputerName (Get-Content -Path .\Machines.txt)
$c = 'Get-EventLog -LogName System | Where-Object {$PSItem.EntryType -eq "error" --and $PSItem.Source -eq "LSASRV"} | Out-File -FilePath Errors.txt'
Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {$Using:c}
Invoke-Command -Session $s -ScriptBlock {Wait-Job -Any}
Cet exemple utilise le paramètre Any de Wait-Job
pour déterminer quand le premier des nombreux travaux en cours d’exécution dans la session active est à l’état de fin. Il montre également comment utiliser l’applet de Wait-Job
commande pour attendre la fin des travaux distants.
La première commande crée une session PSSession sur chacun des ordinateurs répertoriés dans le fichier Machines.txt et stocke les objets PSSession dans la $s
variable. La commande utilise l’applet de Get-Content
commande pour obtenir le contenu du fichier. La Get-Content
commande est placée entre parenthèses pour s’assurer qu’elle s’exécute avant la New-PSSession
commande.
La deuxième commande stocke une Get-EventLog
chaîne de commande, entre guillemets, dans la $c
variable.
La troisième commande utilise l’applet Invoke-Command
de commande pour s’exécuter Start-Job
dans chacune des sessions dans $s
.
La Start-Job
commande démarre un travail qui exécute la Get-EventLog
commande dans la $c
variable.
La commande utilise le modificateur Using scope pour indiquer que la $c
variable a été définie sur l’ordinateur local. Le modificateur d'étendue Using a été introduit pour la première fois dans Windows PowerShell 3.0. Pour plus d’informations sur le modificateur Utilisation de l’étendue, consultez about_Remote_Variables.
La quatrième commande utilise Invoke-Command
pour exécuter une Wait-Job
commande dans les sessions. Il utilise le paramètre Any pour attendre que le premier travail sur les ordinateurs distants soit en état de fin.
Exemple 4 : Définir un temps d’attente pour les travaux sur les ordinateurs distants
PS> $s = New-PSSession -ComputerName Server01, Server02, Server03
PS> $jobs = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {Get-Date}}
PS> $done = Invoke-Command -Session $s -ScriptBlock {Wait-Job -Timeout 30}
PS>
Cet exemple montre comment utiliser le paramètre Timeout de Wait-Job
pour définir un temps d’attente maximal pour les travaux exécutés sur des ordinateurs distants.
La première commande crée une session PSSession sur chacun des trois ordinateurs distants (Server01, Server02 et Server03), puis stocke les objets PSSession dans la $s
variable.
La deuxième commande utilise Invoke-Command
pour s’exécuter Start-Job
dans chacun des objets PSSession dans $s
. Il stocke les objets de travail résultants dans la $jobs
variable.
La troisième commande utilise Invoke-Command
pour s’exécuter Wait-Job
dans chacune des sessions dans $s
. La Wait-Job
commande détermine si toutes les commandes se sont terminées dans un délai de 30 secondes. Il utilise le paramètre Timeout avec une valeur de 30 pour établir le temps d’attente maximal, puis stocke les résultats de la commande dans la $done
variable.
Dans ce cas, après 30 secondes, seule la commande sur l'ordinateur Server02 s'est terminée. Wait-Job
met fin à l’attente, retourne l’objet qui représente le travail terminé et affiche l’invite de commandes.
La $done
variable contient un objet de travail qui représente le travail qui s’est exécuté sur Server02.
Exemple 5 : Attendre la fin de l’un des travaux
Wait-Job -id 1,2,5 -Any
Cette commande identifie trois travaux par leurs ID et attend que l’un d’eux soit dans un état de fin. L’exécution se poursuit à la fin du premier travail.
Exemple 6 : Attendez une période, puis autorisez le travail à continuer en arrière-plan
Wait-Job -Name "DailyLog" -Timeout 120
Cette commande attend 120 secondes (deux minutes) pour que le travail DailyLog se termine. Si le travail ne se termine pas dans les deux prochaines minutes, l’exécution se poursuit et le travail continue de s’exécuter en arrière-plan.
Exemple 7 : Attendre un travail par son nom
Wait-Job -Name "Job3"
Cette commande utilise le nom du travail pour identifier le travail pour lequel attendre.
Exemple 8 : Attendez les travaux sur l’ordinateur local démarrés avec Start-Job
$j = Start-Job -ScriptBlock {Get-ChildItem -Filter *.ps1| Where-Object {$PSItem.LastWriteTime -gt ((Get-Date) - (New-TimeSpan -Days 7))}}
$j | Wait-Job
Cet exemple montre comment utiliser l’applet de commande avec des Wait-Job
travaux démarrés sur l’ordinateur local à l’aide de Start-Job
.
Ces commandes démarrent une tâche qui obtient les fichiers de script Windows PowerShell qui ont été ajoutés ou mis à jour au cours de la semaine précédente.
La première commande utilise Start-Job
pour démarrer un travail sur l’ordinateur local. Le travail exécute une Get-ChildItem
commande qui obtient tous les fichiers qui ont une extension de nom de fichier .ps1 qui ont été ajoutés ou mis à jour au cours de la semaine dernière.
La troisième commande utilise Wait-Job
pour attendre que le travail soit dans un état de fin. Une fois le travail terminé, la commande affiche l’objet de travail, qui contient des informations sur le travail.
Exemple 9 : Attendre que les travaux démarrent sur des ordinateurs distants à l’aide de Invoke-Command
$s = New-PSSession -ComputerName Server01, Server02, Server03
$j = Invoke-Command -Session $s -ScriptBlock {Get-Process} -AsJob
$j | Wait-Job
Cet exemple montre comment utiliser avec des Wait-Job
travaux démarrés sur des ordinateurs distants à l’aide du paramètre AsJob de Invoke-Command
. Lorsque vous utilisez AsJob, le travail est créé sur l’ordinateur local et les résultats sont automatiquement retournés à l’ordinateur local, même si le travail s’exécute sur les ordinateurs distants.
Cet exemple utilise Wait-Job
pour déterminer si une Get-Process
commande s’exécutant dans les sessions sur trois ordinateurs distants est dans un état de fin.
La première commande crée des objets PSSession sur trois ordinateurs et les stocke dans la $s
variable.
La deuxième commande utilise Invoke-Command
pour s’exécuter Get-Process
dans chacune des trois sessions dans $s
.
La commande utilise le paramètre AsJob pour exécuter la commande de manière asynchrone en tant que travail. La commande retourne un objet de travail, tout comme les travaux démarrés à l’aide Start-Job
de , et l’objet de travail est stocké dans la $j
variable.
La troisième commande utilise un opérateur de pipeline (|
) pour envoyer l’objet de travail à $j
l’applet de Wait-Job
commande. Une Invoke-Command
commande n’est pas nécessaire dans ce cas, car le travail réside sur l’ordinateur local.
Exemple 10 : Attendre un travail qui a un ID
Get-Job
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 Job1 Completed True localhost,Server01.. get-service
4 Job4 Completed True localhost dir | where
Wait-Job -Id 1
Cette commande attend la tâche dotée d'un ID de valeur 1.
Paramètres
-Any
Indique que cette applet de commande retourne l’objet de travail et continue l’exécution à la fin d’un travail. Par défaut, Wait-Job
attend que tous les travaux spécifiés soient terminés avant d’afficher l’invite.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Filter
Spécifie une table de hachage des conditions. Cette applet de commande attend les travaux qui répondent à toutes les conditions de la table de hachage. Entrez une table de hachage où les clés sont les propriétés des travaux et les valeurs celles des propriétés des travaux.
Ce paramètre fonctionne uniquement sur les types de tâches personnalisées, tels que les tâches de workflow et les tâches planifiées. Il ne fonctionne pas sur les travaux standard, tels que ceux créés à l’aide de l’applet de Start-Job
commande. Pour plus d'informations sur la prise en charge de ce paramètre, consultez la rubrique d'aide relative au type de tâche.
Ce paramètre a été introduit dans Windows PowerShell 3.0.
Type: | Hashtable |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Force
Indique que cette applet de commande continue d’attendre les travaux à l’état Suspendu ou Déconnecté. Par défaut, Wait-Job
retourne ou met fin à l’attente lorsque les travaux se trouvent dans l’un des états suivants :
- Completed
- Échec
- Arrêté
- Interrompu
- Déconnecté
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 |
-Id
Spécifie un tableau d’ID de travaux pour lesquels cette applet de commande attend.
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, tapez 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 des travaux pour lesquels cette applet de commande attend. Par défaut, il s'agit de toutes les tâches.
Un ID d'instance est un GUID qui identifie de façon unique la tâche sur l'ordinateur. Pour rechercher l’ID instance d’un travail, utilisez Get-Job
.
Type: | Guid[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Job
Spécifie les travaux pour lesquels cette applet de commande attend. Entrez une variable qui contient les objets de traitement ou une commande permettant d'obtenir ces objets de traitement. Vous pouvez également utiliser un opérateur de pipeline pour envoyer des objets de travail à l’applet de Wait-Job
commande. Par défaut, Wait-Job
attend tous les travaux créés dans la session active.
Type: | Job[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Name
Spécifie les noms conviviaux des travaux pour lesquels cette applet de commande attend.
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-State
Spécifie un état de travail. Cette applet de commande attend uniquement les travaux dans l’état spécifié. Les valeurs valides pour ce paramètre sont :
- NotStarted
- Exécution en cours
- Completed
- Échec
- Arrêté
- Bloqué
- Interrompu
- Déconnecté
- Suspension
- En cours d’arrêt
Pour plus d’informations sur les états du travail, consultez Énumération JobState.
Type: | JobState |
Accepted values: | NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Timeout
Spécifie le temps d’attente maximal pour chaque travail, en secondes. La valeur par défaut, -1, indique que l’applet de commande attend la fin du travail. Le minutage commence lorsque vous envoyez la Wait-Job
commande, et non la Start-Job
commande.
Si ce délai est dépassé, l’attente se termine et l’exécution se poursuit, même si le travail est toujours en cours d’exécution. La commande n’affiche aucun message d’erreur.
Type: | Int32 |
Aliases: | TimeoutSec |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Entrées
System.Management.Automation.RemotingJob
Vous pouvez diriger un objet de travail vers cette applet de commande.
Sorties
System.Management.Automation.PSRemotingJob
Cette applet de commande retourne des objets de travail qui représentent les travaux dans un état de fin. Si l’attente se termine parce que la valeur du paramètre Timeout est dépassée, Wait-Job
ne retourne aucun objet.
Notes
PowerShell inclut les alias suivants pour Wait-Job
:
- Toutes les plateformes :
wjb
Par défaut, Wait-Job
retourne ou met fin à l’attente lorsque les travaux se trouvent dans l’un des états suivants :
- Completed
- Échec
- Arrêté
- Interrompu
- Déconnecté
Pour diriger Wait-Job
pour continuer à attendre les travaux suspendus et déconnectés, utilisez le paramètre Force .