Fai in modo che l'Utilità di pianificazione di Windows mi avvisi in caso di errore


65

Ho uno script automatizzato che tira i backup dal mio sito Web al mio computer locale. Questo script potrebbe fallire; una volta che il mio server è stato spento, un'altra volta ho spostato accidentalmente la mia sceneggiatura.

Come faccio a avvisare l'Utilità di pianificazione di Windows con lo script non riuscito (o non viene eseguito / non trovato)?

Non mi interessa se viene visualizzato un messaggio, un'e-mail o qualcosa che appare sul mio desktop. Voglio essere avvisato se qualcosa va storto. Sul mio server, crontab mi invia un'email sugli errori, il che è fantastico. Voglio qualcosa del genere sul mio computer locale Windows 7.


trovato gli ID evento dell'utilità di

Risposte:


87

Quando un'attività pianificata non si avvia, un evento viene scritto nel registro eventi TaskScheduler :

Nota: il registro dell'utilità di pianificazione si trova in (in Strumenti di amministrazione)

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

inserisci qui la descrizione dell'immagine

Windows consente di avviare le attività pianificate per l'avvio quando si verificano numerosi eventi, ad esempio:

  • ora del giorno
  • avvio del sistema
  • Login utente
  • evento registrato nel registro eventi

Grazie a questa conoscenza, puoi creare un'attività pianificata che verrà eseguita quando l'attività pianificata fallisce:

inserisci qui la descrizione dell'immagine

L' azione di questa attività pianificata può quindi essere impostata su qualcosa che ti invia un avviso - nella tua scelta di metodi (ad esempio attiva un arresto). Potresti semplicemente voler inviare una e-mail:

inserisci qui la descrizione dell'immagine

Ecco come Windows gestisce tutto. È possibile visualizzare molte attività diagnostiche che si attivano durante la visualizzazione di un evento nel registro. ad es. quando viene rilevato un conflitto di indirizzi IP, nel registro viene scritto un evento:

  • Registro: sistema
  • Fonte: Tcpip
  • ID evento: 4198

Un'attività pianificata si attiva su questo evento ed esegue un programma per parlarne e risolverlo. Tieni presente che l'ID evento non è specifico per una sola attività. Qualsiasi attività che genera l'evento 203 - Impossibile avviare l'azione, attiverà questa attività.


2
Ottieni l' ID evento dal registro eventi (203 e 103). Puoi vedere l'id dell'evento nello screenshot (203 e 103). Oppure posso dirti l'id dell'evento: 203 e 103.
Ian Boyd,

5
Cosa fai se la seconda attività fallisce!?!?
William Jackson,

3
@WilliamJackson Crea un evento che spegne la macchina. Qualcuno sarà sicuramente avvisato di un problema allora.
Ian Boyd,

11
In realtà, se la seconda attività fallisce, avvierà la seconda attività che fallirà, il che avvierà la seconda attività, che fallirà, che avvierà la seconda attività, che ... otterrai l'idea. L'ho appena scoperto nel modo più duro = /
Rob Penridge,

6
Questo non ti avvisa se un'attività fallisce , solo se non si avvia . Non proprio la stessa cosa.
jwg

11

Ecco il mio script per avvisarmi quando il mio processo di backup ha un valore maggiore di 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 = "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
}

Questa è una buona opzione poiché la risposta attualmente selezionata utilizza una funzionalità di Windows obsoleta.
John Hargrove,

Tieni presente che questa è una soluzione appositamente progettata per gli utenti con Windows in lingua inglese. L'argomento per "trovare" deve essere modificato di conseguenza in base alla lingua dell'utente impostata in Windows.
Eda190,

7

Dai un'occhiata a PushMon . È possibile creare un URL PushMon che verrà chiamato alla fine dello script. Se lo script non viene eseguito perché il server era inattivo o lo script è stato spostato, riceverai una notifica. Puoi ricevere notifiche via e-mail, SMS, telefonate, messaggistica istantanea e Twitter. Questo funzionerà per qualsiasi sistema operativo. Questo è come Pingdom ma per script e attività in background.


1
Se lo aggiungi alla fine del tuo script e lo script è mancante (ad esempio spostato), come dovrebbe essere chiamato‽
Bob

3
Poiché lo script è stato spostato e l'URL non è stato chiamato, verrà visualizzato un avviso.
Bienvenido David,

1
Cercando di visitare il loro sito; ironia della sorte, sembra essere in calo ..
Isaac Kleinman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.