Lassen Sie Windows Task Scheduler mich bei einem Fehler benachrichtigen


65

Ich habe ein automatisiertes Skript, das Backups von meiner Website auf meinen lokalen Computer zieht. Dieses Skript kann fehlschlagen. Einmal war mein Server ausgefallen, ein anderes Mal habe ich mein Skript versehentlich verschoben.

Wie kann ich Windows Task Scheduler veranlassen, mir mitzuteilen, dass das Skript fehlschlägt (oder nicht ausgeführt / nicht gefunden wird)?

Es ist mir egal, ob eine Eingabeaufforderung, eine E-Mail oder etwas auf meinem Desktop angezeigt wird. Ich möchte benachrichtigt werden, wenn etwas schief geht. Auf meinem Server benachrichtigt mich crontab per E-Mail über Fehler - was großartig ist. Ich möchte so etwas auf meinem lokalen Windows 7-Computer.


Antworten:


86

Wenn eine geplante Aufgabe nicht gestartet werden kann, wird ein Ereignis in das TaskScheduler- Ereignisprotokoll geschrieben:

Hinweis: Das Taskplaner-Protokoll befindet sich unter (unter Verwaltung).

 Computer Management
    System Tools
       Event Viewer
          Application and Services Logs
             Microsoft
                Windows
                   Task Scheduler
                      Operational

Bildbeschreibung hier eingeben

Mit Windows können Sie geplante Aufgaben auslösen , die gestartet werden, wenn verschiedene Ereignisse eintreten, z.

  • Uhrzeit
  • Systemstart
  • Benutzer-Anmeldung
  • Ereignis im Ereignisprotokoll aufgezeichnet

Mit diesem Wissen können Sie eine geplante Aufgabe erstellen, die ausgeführt wird, wenn Ihre geplante Aufgabe fehlschlägt:

Bildbeschreibung hier eingeben

Die Aktion dieser geplanten Aufgabe kann dann auf etwas gesetzt werden, das Ihnen eine Warnung sendet - bei der Auswahl der Methoden (z. B. das Auslösen eines Herunterfahrens). Vielleicht möchten Sie nur eine E-Mail senden:

Bildbeschreibung hier eingeben

So geht Windows mit allem um. Im Protokoll werden viele Diagnosetasks angezeigt, die ein Ereignis auslösen. Wenn beispielsweise ein IP-Adressenkonflikt festgestellt wird, wird ein Ereignis in das Protokoll geschrieben:

  • Protokoll: System
  • Quelle: Tcpip
  • Ereignisid: 4198

Eine geplante Aufgabe wird bei diesem Ereignis ausgelöst und führt ein Programm aus, das Sie darüber informiert und das Problem behebt. Beachten Sie, dass die Ereignis-ID nicht nur für eine Aufgabe spezifisch ist. Jede Aufgabe, die das Ereignis 203 - Aktion startet nicht, löst diese Aufgabe aus.


2
Sie erhalten die Ereignis-ID aus dem Ereignisprotokoll (203 und 103). Sie können die Ereignis-IDs im Screenshot sehen (203 und 103). Oder ich kann Ihnen die Ereignis-IDs sagen: 203 und 103.
Ian Boyd

5
Was machst du, wenn die zweite Aufgabe fehlschlägt?!?
William Jackson

3
@WilliamJackson Erstellen Sie ein Ereignis, mit dem der Computer heruntergefahren wird. Dann wird definitiv jemand auf ein Problem hingewiesen.
Ian Boyd

11
Wenn die zweite Aufgabe fehlschlägt, wird die zweite Aufgabe gestartet, die fehlschlägt. Die zweite Aufgabe wird fehlgeschlagen. Die zweite Aufgabe wird gestartet, die ... Sie haben die Idee. Ich habe das gerade auf die harte Tour herausgefunden = /
Rob Penridge

5
Dies warnt Sie nicht, wenn eine Aufgabe fehlschlägt , sondern nur, wenn sie nicht gestartet werden kann . Nicht ganz dasselbe.
JWG

11

Hier ist mein Skript, das mich benachrichtigt, wenn mein Sicherungsjob einen höheren Wert als 0 hat.

$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 = "Alert Scheduled Task <mymail@gmail.com>"
$To = "Me Gmail <mymail@gmail.com>"
$Subject = "Scheduled task 'Backup' failed"
$Body = "Error code: $Code"
$SMTPServer = "smtp.gmail.com"
$SMTPPort = "587"

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

Dies ist eine gute Option, da die aktuell ausgewählte Antwort eine veraltete Windows-Funktion verwendet.
John Hargrove

Bitte beachten Sie, dass dies eine speziell für Benutzer mit Windows entwickelte Lösung in englischer Sprache ist. Das Argument für ´findstr´ muss entsprechend der in Windows eingestellten Benutzersprache geändert werden.
Eda190

7

Schauen Sie sich PushMon an . Sie können eine PushMon-URL erstellen, die am Ende Ihres Skripts aufgerufen wird. Wenn Ihr Skript nicht ausgeführt wird, weil der Server heruntergefahren oder das Skript verschoben wurde, werden Sie benachrichtigt. Sie können per E-Mail, SMS, Anruf, IM und Twitter benachrichtigt werden. Dies funktioniert für jedes Betriebssystem. Das ist wie bei Pingdom, nur für Skripte und Hintergrundaufgaben.


1
Wenn Sie es an das Ende Ihres Skripts anfügen und das Skript fehlt (z. B. verschoben), wie soll es heißen?
Bob

3
Da das Skript verschoben wurde und die URL nicht aufgerufen wurde, erhalten Sie eine Warnung.
Bienvenido David

1
Der Versuch, ihre Website zu besuchen; ironischerweise scheint es unten zu sein ..
Isaac Kleinman
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.