Partager via


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.

Voir aussi