Partager via


À propos de la résolution des problèmes liés aux travaux planifiés

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 propose des solutions à ces problèmes.

Avant d’utiliser des travaux planifiés PowerShell, consultez about_Scheduled_Jobs et les travaux planifiés associés sur les rubriques.

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és, utilisez les applets de commande Job.

Notes

Pour utiliser les applets de commande De travail sur des 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 une 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 de Get-Job 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 les objets ProcessJob dans le pipeline. L’applet Format-Table de commande affiche les propriétés Name, ID et PSBeginTime d’un travail planifié instance 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 de Receive-Job commande. La commande suivante obtient les résultats du instance le plus récent du ProcessJob (ID = 50).

Receive-Job -ID 50

Méthode de base pour la recherche des 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 n’obtient pas le travail instance ou Receive-Job n’obtient pas les résultats du travail, vous pouvez rechercher le travail sur disque dans les fichiers d’historique d’exécution. L’historique des exécutions 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 pour un travail planifié dans le chemin d’accès 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 de Get-ChildItem commande obtient l’historique des exécutions 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 un instance de travail. Les résultats de chaque instance de travail sont enregistrés dans un fichier Results.xml dans le répertoire nommé timestamp.

Par exemple, la commande suivante obtient les fichiersResults.xml pour chaque instance enregistré 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.

Notes

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

Receive-Job applet de commande a peut-être déjà retourné les résultats

Si Receive-Job ne retourne pas le travail instance résultats, cela peut être dû au fait qu’une Receive-Job commande a été exécutée pour ce travail instance dans la session active sans le paramètre Keep.

Lorsque vous utilisez Receive-Job sans le paramètre Keep, Receive-Job retourne les résultats du travail et définit la propriété HasMoreData du instance sur False. La valeur False signifie que Receive-Job les résultats de la tâche ont été retournés et que le 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 récupérer le travail instance résultats, 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 des résultats plusieurs fois dans une session

Pour obtenir le résultat d’un travail instance 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é la valeur ExecutionHistoryLength

La propriété ExecutionHistoryLength d’un travail planifié détermine le nombre d’instances de travail enregistrées sur le disque et leurs résultats. La valeur par défaut est 32. Lorsque le nombre d’instances d’un travail planifié dépasse cette valeur, PowerShell supprime le plus ancien instance de travail pour faire de la place pour 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 Register-ScheduledJob commande et Set-ScheduledJob .

La commande suivante augmente la valeur de la propriété ExecutionHistoryLength à 50.

Get-ScheduledJob ProcessJob | Set-ScheduledJob -MaxResultCount 50

Les résultats du travail instance 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 Remove-Job commande supprime les résultats du 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 des exécutions 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 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 ne sont disponibles que 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 ; ils existent uniquement dans la session dans laquelle ils sont créés. Si vous supprimez le travail avec Remove-Job, fermez la session ou fermez PowerShell, le travail instance 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 se déclenche 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é est 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 est 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, comme 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 vérifiez 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 qui a une durée d’InactivitéDuration longue ou une brève idleTimeout peut ne jamais s’exécuter.

Utilisez l’applet de Get-ScheduledJobOption commande pour examiner les options de travail et leurs valeurs.

Get-ScheduledJob -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 une description des options de travail planifié, consultez New-ScheduledJobOption.

Le instance de travail planifié a peut-être échoué

Si une commande de travail planifiée échoue, PowerShell la 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 :

Vérifiez les erreurs dans le journal des événements du Planificateur de tâches. Pour case activée le journal, utilisez observateur d'événements ou une commande PowerShell telle que :

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 Register-ScheduledJob commande ou Set-ScheduledJob .

Si cet utilisateur n’a pas l’autorisation d’exécuter les commandes ou les scripts, le travail échoue.

Impossible d’obtenir le travail planifié ou le travail planifié est endommagé

En de rares occasions, les travaux planifiés peuvent être 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 un code 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 du disque.

S’il ne peut pas supprimer le travail planifié, vous recevez un message d’erreur de travail endommagé chaque fois que vous exécutez l’applet de Get-ScheduledJob 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 s’affichent 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 systématiquement les travaux planifiés

Lorsque le module PSScheduledJob ne se trouve pas dans la session active, les applets de commande de travail ne peuvent pas obtenir les 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 de Get-ScheduledJob 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 ne se trouve 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 car la Get-ScheduledJob commande importe automatiquement le module PSScheduledJob , puis exécute la commande.

Voir aussi

about_Scheduled_Jobs_Basics

about_Scheduled_Jobs_Advanced

about_Scheduled_Jobs

Planificateur de tâches