Spraw, aby Harmonogram zadań systemu Windows ostrzegał mnie o niepowodzeniu

65

Mam zautomatyzowany skrypt, który ściąga kopie zapasowe z mojej witryny na komputer lokalny. Ten skrypt może zawieść; gdy mój serwer był wyłączony, innym razem przypadkowo przeniosłem skrypt.

Jak sprawić, aby Harmonogram zadań systemu Windows informował mnie, że skrypt nie działa (lub nie działa / nie znaleziono)?

Nie obchodzi mnie, czy pojawi się monit, wiadomość e-mail lub coś, co pojawi się na moim pulpicie. Chcę otrzymać powiadomienie, jeśli coś pójdzie nie tak. Na moim serwerze crontab wysyła mi e-maile o błędach - co jest świetne. Chcę coś takiego na moim komputerze lokalnym z systemem Windows 7.

Eliran Malka
źródło
znalazł identyfikatory zdarzeń harmonogramu zadań co najmniej mnaoumov.wordpress.com/2014/05/15/task-scheduler-event-ids

Odpowiedzi:

87

Gdy zaplanowane zadanie nie uruchamia się, zdarzenie jest zapisywane w dzienniku zdarzeń TaskScheduler :

Uwaga: Dziennik Harmonogramu zadań znajduje się w (w Narzędziach administracyjnych)

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

wprowadź opis zdjęcia tutaj

System Windows umożliwia uruchamianie zaplanowanych zadań w celu uruchomienia w przypadku wystąpienia różnych zdarzeń, np .:

  • pora dnia
  • uruchomienie systemu
  • login użytkownika
  • zdarzenie zapisane w dzienniku zdarzeń

Uzbrojeni w tę wiedzę, możesz utworzyć zaplanowane zadanie, które będzie uruchamiane, gdy zaplanowane zadanie zakończy się niepowodzeniem:

wprowadź opis zdjęcia tutaj

Działanie zaplanowanego zadania można następnie ustawić na coś, co wyśle ​​ci alert - w zależności od wybranych metod (np. Spowoduje wyłączenie). Możesz po prostu chcieć, aby wysłał e-mail:

wprowadź opis zdjęcia tutaj

W ten sposób Windows obsługuje wszystko. W dzienniku można zobaczyć wiele zadań diagnostycznych wyzwalających zdarzenie. np. po wykryciu konfliktu adresu IP w dzienniku zapisywane jest zdarzenie:

  • Log: System
  • Źródło: Tcpip
  • Identyfikator zdarzenia: 4198

Zaplanowane zadanie wyzwala to zdarzenie i uruchamia program, który poinformuje Cię o tym i naprawi. Pamiętaj, że identyfikator zdarzenia nie jest specyficzny tylko dla jednego zadania. Każde zadanie, które generuje zdarzenie 203 - Działanie się nie uruchomiło, wyzwoli to zadanie.

Ian Boyd
źródło
2
Identyfikator zdarzenia otrzymasz z dziennika zdarzeń (203 i 103). Możesz zobaczyć identyfikator zdarzenia na zrzucie ekranu (203 i 103). Mogę też podać identyfikator zdarzenia: 203 i 103.
Ian Boyd
5
Co robisz, jeśli drugie zadanie się nie powiedzie!?!?
William Jackson
3
@WilliamJackson Utwórz wydarzenie, które wyłącza maszynę. Ktoś na pewno zostanie wtedy powiadomiony o problemie.
Ian Boyd
11
Właściwie, jeśli drugie zadanie się nie powiedzie, uruchomi się drugie zadanie, które się nie powiedzie, co uruchomi drugie zadanie, które się nie powiedzie, i uruchomi drugie zadanie, które ... dostaniesz pomysł. Właśnie dowiedziałem się tego
Rob Penridge,
6
To nie ostrzega, jeśli zadanie się nie powiedzie , tylko jeśli się nie uruchomi . Niezupełnie to samo.
jwg
11

Oto mój skrypt ostrzegający mnie, gdy moje zadanie tworzenia kopii zapasowej ma wartość większą niż 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 = "[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
źródło
Jest to dobra opcja, ponieważ obecnie wybrana odpowiedź używa przestarzałej funkcji systemu Windows.
John Hargrove,
Należy pamiętać, że jest to specjalnie spreparowane rozwiązanie dla użytkowników systemu Windows w języku angielskim. Argument „findstr” należy zmienić odpowiednio do języka użytkownika ustawionego w systemie Windows.
Eda190,
7

Spójrz na PushMon . Możesz utworzyć adres URL PushMon, który będzie wywoływany na końcu skryptu. Jeśli skrypt nie działa, ponieważ serwer nie działa lub skrypt został przeniesiony, otrzymasz powiadomienie. Możesz otrzymywać powiadomienia przez e-mail, SMS, połączenia telefoniczne, IM i Twitter. Będzie to działać dla każdego systemu operacyjnego. To jest jak Pingdom, ale dla skryptów i zadań w tle.

Bienvenido David
źródło
1
Jeśli dodasz go na końcu skryptu, a skryptu brakuje (np. Przeniesiono), jak ma się on nazywać‽
Bob
3
Ponieważ skrypt został przeniesiony, a adres URL nie został wywołany, otrzymasz alert.
Bienvenido David
1
Próbuje odwiedzić ich stronę; jak na ironię, wydaje się, że jest w dół ...
Isaac Kleinman