88 votes

Faites en sorte que le Planificateur de tâches de Windows me prévienne en cas d'échec

J'ai un script automatisé qui récupère les sauvegardes de mon site web sur mon ordinateur local. Ce script pourrait échouer ; une fois mon serveur était en panne, une autre fois j'ai déplacé mon script par erreur.

Comment puis-je faire pour que le Planificateur de tâches Windows m'avertisse si le script échoue (ou ne s'exécute pas/n'est pas trouvé) ?

Peu m'importe si une fenêtre contextuelle s'affiche, un e-mail ou quelque chose qui apparaît sur mon bureau. Je veux être averti si quelque chose ne va pas. Sur mon serveur, crontab m'envoie des e-mails en cas d'erreurs - ce qui est génial. Je veux quelque chose de similaire sur mon ordinateur local Windows 7.

0 votes

J'ai trouvé les ID d'événements du planificateur de tâches au moins mnaoumov.wordpress.com/2014/05/15/task-scheduler-event-ids

107voto

Remi Despres-Smyth Points 1500

Lorsqu'une tâche planifiée échoue à démarrer, un événement est enregistré dans le journal des événements de TaskScheduler:

Note: Le journal du Planificateur de tâches se trouve à (sous Outils d'administration)

 Gestion de l'ordinateur
    Outils Système
       Observateur d'événements
          Journaux des applications et des services
             Microsoft
                Windows
                   Planificateur de tâches
                      Opération

Entrer la description de l'image ici

Windows vous permet de déclencher des tâches planifiées pour démarrer lorsque différents événements se produisent, par exemple :

  • heure de la journée
  • démarrage du système
  • connexion de l'utilisateur
  • événement enregistré dans le journal des événements

Armé de cette connaissance, vous pouvez créer une tâche planifiée qui s'exécute lorsque votre tâche planifiée échoue :

Entrer la description de l'image ici

L'action de cette tâche planifiée peut alors être configurée pour vous envoyer une alerte - selon le mode de votre choix (par exemple, déclencher un arrêt). Vous voudrez peut-être simplement qu'elle vous envoie un e-mail :

Entrer la description de l'image ici

C'est ainsi que Windows gère tout. Vous pouvez voir de nombreuses tâches de diagnostic se déclencher sur un événement apparaissant dans le journal. Par exemple, lorsqu'un conflit d'adresses IP est détecté, un événement est enregistré dans le journal :

  • Journal : Système
  • Source : Tcpip
  • ID d'événement : 4198

Une tâche planifiée se déclenche sur cet événement et exécute un programme pour vous informer et le résoudre. Gardez à l'esprit que l'identifiant de l'événement n'est pas spécifique à une seule tâche. Toute tâche qui génère l'événement 203 - L'action n'a pas pu démarrer, déclenchera cette tâche.

0 votes

Ces captures d'écran sont de Windows 7. Windows XP ne le prend pas en charge. Windows Vista: je ne sais pas. Quelle version de Windows avez-vous?

0 votes

Ian Boyd: Windows7 "édition familiale". Voici ce que je vois i.imgur.com/Qd8QN.png

0 votes

Cette capture d'écran est le Gestionnaire des tâches , à l'intérieur du Planificateur de tâches . Voyez-vous Planificateur de tâches dans le Journal d'événements ?

25voto

Hans Falk Points 181

Voici mon script pour m'alerter lorsque mon travail de sauvegarde a une valeur supérieure à 0.

$ScheduledTaskName = "Hans\Backup"
$Result = (schtasks /query /FO LIST /V /TN $ScheduledTaskName  | findstr "Result")
$Result = $Result.substring(12)
$Code = $Result.trim()

If ($Code -gt 0) {
    $User = "mymail@gmail.com"
    $Pass = ConvertTo-SecureString -String "myPassword" -AsPlainText -Force
    $Cred = New-Object System.Management.Automation.PSCredential $User, $Pass
################################################################################

$From = "Alerte Tâche Programmée "
$To = "Moi Gmail "
$Subject = "Échec de la tâche programmée 'Backup'"
$Body = "Code d'erreur: $Code"
$SMTPServer = "smtp.gmail.com"
$SMTPPort = "587"

Send-MailMessage -From $From -to $To -Subject $Subject `
-Body $Body -SmtpServer $SMTPServer -port $SMTPPort -UseSsl `
-Credential $Cred
}

1 votes

C'est une bonne option car la réponse actuellement sélectionnée utilise une fonctionnalité Windows désuète.

1 votes

Veuillez garder à l'esprit que cette solution est spécifiquement conçue pour les utilisateurs ayant Windows en langue anglaise. L'argument pour ´findstr´ doit être modifié en fonction de la langue définie par l'utilisateur dans Windows.

1 votes

Je pense que même si nous envoyons des e-mails avec PowerShell maintenant, le déclencheur devrait tout de même être le journal d'événements, tout comme dans la réponse acceptée.

7voto

Bienvenido David Points 171

Jetez un œil à PushMon. Vous pouvez créer une URL PushMon qui sera appelée à la fin de votre script. Si votre script ne s'exécute pas parce que le serveur était hors service ou que le script a été déplacé, vous serez notifié. Vous pouvez être notifié par e-mail, SMS, appel téléphonique, messagerie instantanée et Twitter. Cela fonctionnera pour tout système d'exploitation. C'est comme Pingdom mais pour les scripts et les tâches en arrière-plan.

1 votes

Si vous l'ajoutez à la fin de votre script et que le script est manquant (par exemple, déplacé), comment est-il censé être appelé

4 votes

Depuis que le script a été déplacé et que l'URL n'a pas été appelée, vous recevrez une alerte.

3 votes

Essayer de visiter leur site; ironiquement, il semble être en panne..

3voto

Jeff Mergler Points 171

Modifiez : revoyez la réponse de Ian Boyd puis, lorsque vous en arrivez à utiliser l'Action de messagerie électronique, revenez ici.

Depuis la publication de la réponse initiale de Ian Boyd, l'Action de messagerie électronique dans le Planificateur de tâches a été obsolète et finalement supprimée. Mais il n'est pas difficile de créer un script Powershell qui enverra des e-mails SMTP et de l'exécuter à la place. Voici un exemple en utilisant Powershell et system.net.mail.smtpClient:

$SmtpClient = new-object system.net.mail.smtpClient
$MailMessage = New-Object system.net.mail.mailmessage
$SmtpClient.Host = "mail.votredomaine.com"
$SmtpClient.Port = 587
#$SmtpClient.EnableSsl = $true
$SmtpClient.Credentials = New-Object System.Net.NetworkCredential( "support@votredomaine.com", "{pw}" );
$mailmessage.from = ("support@votredomaine.com")
$mailmessage.To.add("support@votredomaine.com")
$mailmessage.Subject = “Alerte serveur”
$mailmessage.Body = “Evénement 103 ou 203 détecté. Cela indique qu'une tâche planifiée a échoué.”
$smtpclient.Send($mailmessage)

Modifiez les détails si nécessaire (comme "mail.votredomaine.com" et les informations d'identification "support@votredomaine.com" et "{pw}"). Vous devrez peut-être jouer avec Port et EnableSsl.

Sauvegardez ce script en tant que FailedTaskAlert.ps1 dans un dossier commun, tel que C:\Users\Public\Documents.

Maintenant, connectons ça à une tâche.

Dans l'onglet Action, utilisez l'action Démarrer un programme. Dans Programme, saisissez "powershell.exe" et dans Ajouter des arguments, entrez votre fichier ps1, tel que "C:\Users\Public\Documents\FailedTaskAlert.ps1"

Je vois que Hans Folk le fait également en utilisant Send-MailMessage mais j'ai pensé qu'une autre variation de cmdlet et une explication explicite de la façon dont le script Powershell peut être connecté à l'Action de la tâche serait utile pour les autres.

Attention: assurez-vous que toute l'historique des tâches est activée dans le volet Actions à droite du Planificateur de tâches, sinon vous ne verrez pas les événements enregistrés. Si vous voyez l'onglet Historique avec une étiquette "désactivée", vous saurez que cette fonctionnalité est désactivée.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X