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.

Eliran Malka
quelle

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.

Ian Boyd
quelle
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 = "[email protected]"
    $Pass = ConvertTo-SecureString -String "myPassword" -AsPlainText -Force
    $Cred = New-Object System.Management.Automation.PSCredential $User, $Pass
################################################################################

$From = "Alert Scheduled Task <[email protected]>"
$To = "Me Gmail <[email protected]>"
$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
}
Hans Falk
quelle
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.

Bienvenido David
quelle
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