À 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.