about_Scheduled_Jobs_Troubleshooting
Description courte
Explique comment résoudre les problèmes liés aux travaux planifiés
Description longue
Ce document décrit certains des problèmes que vous pouvez rencontrer lors de l’utilisation des fonctionnalités de travail planifiées de PowerShell et suggère des solutions à ces problèmes.
Avant d’utiliser des travaux planifiés PowerShell, consultez about_Scheduled_Jobs et les tâches planifiées associées sur les rubriques.
Pour plus d’informations sur les applets de commande contenues dans le module PSScheduledJob , consultez PSScheduledJob.
Impossible de trouver les résultats du travail
Méthode de base pour obtenir des résultats de travail dans PowerShell
Lorsqu’un travail planifié s’exécute, il crée une instance du travail planifié. Pour afficher, gérer et obtenir les résultats des instances de travail planifiées, utilisez les applets de commande Job.
Remarque
Pour utiliser les applets de commande Job sur les instances de travaux planifiés, le module PSScheduledJob doit être importé dans la session. Pour importer le module PSScheduledJob , tapez Import-Module PSScheduledJob
ou utilisez n’importe quelle applet de commande de travail planifiée, telle que Get-ScheduledJob
.
Pour obtenir la liste de toutes les instances d’un travail planifié, utilisez l’applet Get-Job
de commande.
Import-Module PSScheduledJob
Get-Job ProcessJob
Id Name PSJobTypeName State HasMoreData Location
-- ---- ------------- ----- ----------- --------
43 ProcessJob PSScheduledJob Completed False localhost
44 ProcessJob PSScheduledJob Completed False localhost
45 ProcessJob PSScheduledJob Completed False localhost
46 ProcessJob PSScheduledJob Completed False localhost
47 ProcessJob PSScheduledJob Completed False localhost
48 ProcessJob PSScheduledJob Completed False localhost
49 ProcessJob PSScheduledJob Completed False localhost
50 ProcessJob PSScheduledJob Completed False localhost
L’applet Get-Job
de commande envoie des objets ProcessJob vers le bas du pipeline. L’applet Format-Table
de commande affiche les propriétés Name, ID et PSBeginTime d’une instance de travail planifiée dans une table.
Get-Job ProcessJob | Format-Table -Property Name, ID, PSBeginTime -Auto
Name Id PSBeginTime
---- -- ---------
ProcessJob 43 11/2/2011 3:00:02 AM
ProcessJob 44 11/3/2011 3:00:02 AM
ProcessJob 45 11/4/2011 3:00:02 AM
ProcessJob 46 11/5/2011 3:00:02 AM
ProcessJob 47 11/6/2011 3:00:02 AM
ProcessJob 48 11/7/2011 12:00:01 AM
ProcessJob 49 11/7/2011 3:00:02 AM
ProcessJob 50 11/8/2011 3:00:02 AM
Pour obtenir les résultats d’une instance d’un travail planifié, utilisez l’applet Receive-Job
de commande. La commande suivante obtient les résultats de la dernière instance de ProcessJob (ID = 50).
Receive-Job -ID 50
Méthode de base pour rechercher les résultats du travail sur le disque
Pour gérer les travaux planifiés, utilisez les applets de commande de travail, telles que Get-Job
et Receive-Job
.
Si Get-Job
l’instance de travail n’obtient pas ou Receive-Job
ne obtient pas les résultats du travail, vous pouvez rechercher les fichiers d’historique d’exécution du travail sur le disque.
L’historique d’exécution contient un enregistrement de toutes les instances de travail déclenchées.
Vérifiez qu’il existe un répertoire nommé timestamp dans le répertoire d’un travail planifié dans le chemin suivant :
$HOME\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJob\<ScheduledJobName>\Output
Par exemple :
C:\Users<UserName>\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJob\<ScheduledJobName>\Output
Par exemple, l’applet Get-ChildItem
de commande obtient l’historique d’exécution sur disque du travail planifié ProcessJob .
$Path = '$HOME\AppData\Local\Microsoft\Windows\PowerShell'
$Path += '\ScheduledJobs\ProcessJob\Output'
Get-ChildItem $Path
Directory: C:\Users\User01\AppData\Local\Microsoft\Windows\PowerShell
\ScheduledJobs\ProcessJob\Output
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 11/2/2011 3:00 AM 20111102-030002-260
d---- 11/3/2011 3:00 AM 20111103-030002-277
d---- 11/4/2011 3:00 AM 20111104-030002-209
d---- 11/5/2011 3:00 AM 20111105-030002-251
d---- 11/6/2011 3:00 AM 20111106-030002-174
d---- 11/7/2011 12:00 AM 20111107-000001-914
d---- 11/7/2011 3:00 AM 20111107-030002-376
Chaque répertoire nommé timestamp représente une instance de travail. Les résultats de chaque instance de travail sont enregistrés dans un fichier Results.xml dans le répertoire timestamp-named.
Par exemple, la commande suivante obtient les fichiers Results.xml pour chaque instance enregistrée du travail planifié ProcessJob . Si le fichier Results.xml est manquant, PowerShell ne peut pas retourner ou afficher les résultats du travail.
$Path = '$HOME\AppData\Local\Microsoft\Windows\PowerShell'
$Path += '\ScheduledJobs\ProcessJob\Output\*\Results.xml'
Get-ChildItem $Path
Directory: C:\Users\User01\Appdata\Local\Microsoft\Windows\PowerShell
\ScheduledJobs\ProcessJob\Output
L’applet de commande de travail peut ne pas être en mesure d’obtenir des instances de travail planifiées ou leurs résultats, car le module PSScheduledJob n’est pas importé dans la session.
Remarque
Avant d’utiliser une applet de commande de travail sur des instances de travail planifiées, vérifiez que le module PSScheduledJob est inclus dans la session. Sans le module PSScheduledJob , les applets de commande de travail ne peuvent pas obtenir les instances de travail planifiées ou leurs résultats.
Pour importer le module PSScheduledJob :
Import-Module PSScheduledJob
L’applet de commande Receive-Job peut déjà avoir retourné les résultats
Si Receive-Job
elle ne retourne pas les résultats de l’instance de travail, cela peut être dû au fait qu’une Receive-Job
commande a été exécutée pour cette instance de travail dans la session active sans le paramètre Keep .
Lorsque vous utilisez Receive-Job
sans paramètre Keep, Receive-Job
retourne les résultats du travail et définit la propriété HasMoreData de l’instance de travail sur False. La valeur False signifie que Receive-Job
les résultats du travail retournés et que l’instance n’a plus de résultats à retourner. Ce paramètre est approprié pour les travaux en arrière-plan standard, mais pas pour les instances de travaux planifiés, qui sont enregistrées sur le disque.
Pour obtenir à nouveau les résultats de l’instance de travail, démarrez une nouvelle session PowerShell en tapant PowerShell
. Importez le module PSScheduledJob , puis réessayez la Receive-Job
commande.
Receive-Job -ID 50
#No results
PowerShell.exe
Windows PowerShell
Copyright (C) 2012 Microsoft Corporation. All rights reserved.
Import-Module PSScheduledJob
Receive-Job -ID 50
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
1213 33 12348 21676 88 25.71 1608 CcmExec
29 4 1168 2920 43 0.02 748 conhost
46 6 2208 4612 45 0.03 1640 conhost
Utilisation du paramètre Keep pour obtenir les résultats plusieurs fois dans une session
Pour obtenir le résultat d’une instance de travail plusieurs fois dans une session, utilisez le paramètre Keep de l’applet Receive-Job
de commande.
Import-Module PSScheduledJob
Receive-Job -ID 50 -Keep
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
1213 33 12348 21676 88 25.71 1608 CcmExec
29 4 1168 2920 43 0.02 748 conhost
46 6 2208 4612 45 0.03 1640 conhost
Receive-Job -ID 50 -Keep
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
1213 33 12348 21676 88 25.71 1608 CcmExec
29 4 1168 2920 43 0.02 748 conhost
46 6 2208 4612 45 0.03 1640 conhost
Le travail planifié peut être endommagé
Si un travail planifié est endommagé, PowerShell supprime le travail planifié endommagé et ses résultats. Vous ne pouvez pas récupérer les résultats d’un travail planifié endommagé.
Pour déterminer si un travail planifié existe toujours, utilisez l’applet de Get-ScheduledJob
commande.
Get-ScheduledJob
Le nombre de résultats peut avoir dépassé l’ExecutionHistoryLength
La propriété ExecutionHistoryLength d’un travail planifié détermine le nombre d’instances de travail et leurs résultats enregistrés sur le disque. La valeur par défaut est 32. Lorsque le nombre d’instances d’un travail planifié dépasse cette valeur, PowerShell supprime l’instance de travail la plus ancienne pour faire place à chaque nouvelle instance de travail.
Pour obtenir la valeur de la propriété ExecutionHistoryLength d’un travail planifié, utilisez le format de commande suivant :
(Get-ScheduledJob <JobName>).ExecutionHistoryLength
Par exemple, la commande suivante obtient la valeur de la propriété ExecutionHistoryLength du travail planifié ProcessJob .
(Get-ScheduledJob ProcessJob).ExecutionHistoryLength
Pour définir ou modifier la valeur de la propriété ExecutionHistoryLength, utilisez le paramètre MaxResultCount des applets de commande et Set-ScheduledJob
des applets de Register-ScheduledJob
commande.
La commande suivante augmente la valeur de la propriété ExecutionHistoryLength à 50.
Get-ScheduledJob ProcessJob | Set-ScheduledJob -MaxResultCount 50
Les résultats de l’instance de travail ont peut-être été supprimés
Le paramètre ClearExecutionHistory de l’applet Set-ScheduledJob
de commande supprime l’historique d’exécution d’un travail. Vous pouvez utiliser cette fonctionnalité pour libérer de l’espace disque ou supprimer des résultats qui ne sont pas nécessaires, ou déjà utilisés, analysés ou enregistrés dans un autre emplacement.
Pour supprimer l’historique d’exécution d’un travail planifié, utilisez le paramètre ClearExecutionHistory du travail planifié.
La commande suivante supprime l’historique d’exécution du travail planifié ProcessJob .
Get-ScheduledJob ProcessJob | Set-ScheduledJob -ClearExecutionHistory
En outre, l’applet de commande supprime les résultats du Remove-Job
travail. Lorsque vous utilisez Remove-Job
pour supprimer un travail planifié, il supprime toutes les instances du travail sur le disque, y compris l’historique d’exécution et tous les résultats du travail.
Les travaux démarrés à l’aide de l’applet de commande Start-Job ne sont pas enregistrés sur le disque
Lorsque vous utilisez Start-Job
pour démarrer un travail planifié, au lieu d’utiliser un déclencheur de travail, Start-Job
démarre un travail en arrière-plan standard. Le travail en arrière-plan et ses résultats ne sont pas stockés dans l’historique d’exécution du travail sur le disque.
Vous pouvez utiliser l’applet Get-Job
de commande pour obtenir le travail et l’applet Receive-Job
de commande pour obtenir les résultats du travail, mais les résultats sont disponibles uniquement jusqu’à ce que vous les receviez, sauf si vous utilisez le paramètre Keep de l’applet Receive-Job
de commande.
En outre, les travaux en arrière-plan et leurs résultats sont spécifiques à la session ; elles existent uniquement dans la session dans laquelle elles sont créées. Si vous supprimez le travail avec Remove-Job
, fermez la session ou fermez PowerShell, l’instance de travail et ses résultats sont supprimés.
Le travail planifié ne s’exécute pas
Les travaux planifiés ne s’exécutent pas automatiquement si le travail est déclenché ou si le travail planifié est désactivé.
Utilisez l’applet Get-ScheduledJob
de commande pour obtenir le travail planifié. Vérifiez que la valeur de la propriété Enabled du travail planifié a la valeur True.
Get-ScheduledJob ProcessJob
Id Name Triggers Command Enabled
-- ---- -------- ------- -------
4 ProcessJob {1, 2} Get-Process True
(Get-ScheduledJob ProcessJob).Enabled
True
Utilisez l’applet Get-JobTrigger
de commande pour obtenir les déclencheurs de travail du travail planifié.
Vérifiez que la valeur de la propriété Enabled du déclencheur de travail a la valeur True.
Get-ScheduledJob ProcessJob | Get-JobTrigger
Id Frequency Time DaysOfWeek Enabled
-- --------- ---- ---------- -------
1 Weekly 11/7/2011 5:00:00 AM {Monday, Thursday} True
2 Daily 11/7/2011 3:00:00 PM True
Get-ScheduledJob ProcessJob|Get-JobTrigger|Format-Table ID, Enabled -Auto
Id Enabled
-- -------
1 True
2 True
Les travaux planifiés ne s’exécutent pas automatiquement si les déclencheurs de travail ne sont pas valides
Par exemple, un déclencheur de travail peut spécifier une date dans le passé ou une date qui ne se produit pas, par exemple le 5e lundi du mois.
Les travaux planifiés ne s’exécutent pas automatiquement si les conditions du déclencheur de travail ou les options de travail ne sont pas satisfaites.
Par exemple, un travail planifié qui s’exécute uniquement lorsqu’un utilisateur particulier se connecte à l’ordinateur ne s’exécute pas si cet utilisateur ne se connecte pas ou se connecte uniquement à distance.
Examinez les options du travail planifié et assurez-vous qu’elles sont satisfaites. Par exemple, un travail planifié qui nécessite que l’ordinateur soit inactif ou nécessite une connexion réseau, ou qu’il a une longue inactivité ou qu’un bref IdleTimeout ne s’exécute jamais.
Utilisez l’applet Get-ScheduledJobOption
de commande pour examiner les options de travail et leurs valeurs.
Get-ScheduledJobOption -Name ProcessJob
StartIfOnBatteries : False
StopIfGoingOnBatteries : True
WakeToRun : True
StartIfNotIdle : True
StopIfGoingOffIdle : False
RestartOnIdleResume : False
IdleDuration : 00:10:00
IdleTimeout : 01:00:00
ShowInTaskScheduler : True
RunElevated : False
RunWithoutNetwork : True
DoNotAllowDemandStart : False
MultipleInstancePolicy : IgnoreNew
JobDefinition : Microsoft.PowerShell.ScheduledJob.ScheduledJobDefinition
Pour obtenir des descriptions des options de travail planifiées, consultez New-ScheduledJobOption.
L’instance de travail planifiée a peut-être échoué
Si une commande de travail planifiée échoue, PowerShell le signale immédiatement en générant un message d’erreur. Toutefois, si le travail échoue lorsque le Planificateur de tâches tente de l’exécuter, l’erreur n’est pas disponible pour PowerShell.
Utilisez les méthodes suivantes pour détecter et corriger les échecs de travail :
Recherchez les erreurs dans le journal des événements du Planificateur de tâches. Pour vérifier le journal, utilisez l’Observateur d’événements ou une commande PowerShell, par exemple :
Get-WinEvent -LogName Microsoft-Windows-TaskScheduler/Operational |
Where {$_.Message -like "fail"}
Vérifiez l’enregistrement du travail dans le Planificateur de tâches. Les travaux planifiés PowerShell sont stockés dans le dossier planifié des tâches suivant :
Task Scheduler Library\Microsoft\Windows\PowerShell\ScheduledJobs
Le travail planifié peut ne pas s’exécuter en raison d’une autorisation insuffisante
Les travaux planifiés s’exécutent avec les autorisations de l’utilisateur qui a créé le travail ou les autorisations de l’utilisateur spécifié par le paramètre Credential dans la ou Set-ScheduledJob
la Register-ScheduledJob
commande.
Si cet utilisateur n’a pas l’autorisation d’exécuter les commandes ou les scripts, le travail échoue.
Impossible d’obtenir un travail planifié ou un travail planifié est endommagé
Dans de rares cas, les travaux planifiés peuvent devenir endommagés ou contenir des contradictions internes qui ne peuvent pas être résolues. En règle générale, cela se produit lorsque les fichiers XML du travail planifié sont modifiés manuellement, ce qui entraîne une modification xml non valide.
Lorsqu’un travail planifié est endommagé, PowerShell tente de supprimer le travail planifié, son historique d’exécution et ses résultats à partir du disque.
S’il ne peut pas supprimer le travail planifié, vous obtenez un message d’erreur de travail endommagé chaque fois que vous exécutez l’applet Get-ScheduledJob
de commande.
Pour supprimer un travail planifié endommagé, utilisez l’une des méthodes suivantes :
Supprimez le <ScheduledJobName>
répertoire du travail planifié. Ne supprimez pas le répertoire ScheduledJob .
Emplacement du répertoire :
$env:UserProfile\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs<ScheduledJobName>
Par exemple :
C:\Users<UserName>\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs<ScheduledJobName>.
Utilisez le planificateur de tâches pour supprimer le travail planifié. Les tâches planifiées PowerShell apparaissent dans le chemin d’accès du planificateur de tâches suivant :
Task Scheduler Library\Microsoft\Windows\PowerShell\ScheduledJobs<ScheduledJobName>
Les applets de commande de travail ne peuvent pas trouver de tâches planifiées de manière cohérente
Lorsque le module PSScheduledJob n’est pas dans la session active, les applets de commande de travail ne peuvent pas obtenir de travaux planifiés, les démarrer ou obtenir leurs résultats.
Pour importer le module PSScheduledJob , tapez Import-Module PSScheduledJob
ou exécutez ou obtenez une applet de commande dans le module, telle que l’applet Get-ScheduledJob
de commande.
À compter de PowerShell 3.0, les modules sont importés automatiquement lorsque vous obtenez ou utilisez une applet de commande dans le module.
Lorsque le module PSScheduledJob n’est pas dans la session active, la séquence de commandes suivante est possible.
Get-Job ProcessJob
Get-Job : The command cannot find the job because the job name
ProcessJob was not found.
Verify the value of the Name parameter, and then try the command again.
+ CategoryInfo : ObjectNotFound: (ProcessJob:String) [Get-Job],
PSArgumentException
+ FullyQualifiedErrorId : JobWithSpecifiedNameNotFound,Microsoft.PowerShell.
Commands.GetJobCommand
Get-Job
Get-ScheduledJob ProcessJob
Id Name Triggers Command Enabled
-- ---- -------- ------- -------
4 ProcessJob {1} Get-Process True
Get-Job ProcessJob
Id Name PSJobTypeName State HasMoreData Location
-- ---- ------------- ----- ----------- --------
43 ProcessJob PSScheduledJob Completed True localhost
44 ProcessJob PSScheduledJob Completed True localhost
45 ProcessJob PSScheduledJob Completed True localhost
46 ProcessJob PSScheduledJob Completed True localhost
47 ProcessJob PSScheduledJob Completed True localhost
48 ProcessJob PSScheduledJob Completed True localhost
49 ProcessJob PSScheduledJob Completed True localhost
50 ProcessJob PSScheduledJob Completed True localhost
Ce comportement se produit parce que la Get-ScheduledJob
commande importe automatiquement le module PSScheduledJob , puis exécute la commande.