Alert email gdy wystąpi zdarzenie w dzienniku Windows

W pracy administratora IT zdarza się, że w dzienniku zdarzeń (Event Viewer) Windows pojawią się błędy… Fajnie wtedy było by otrzymać email z taką informacją. O ile w wersjach Windows 7 i Windows Server 2008 była taka opcja wbudowana w harmonogram zadań (Task Scheduler) to w wersjach od Windows 8 i Windows Sever 2012 Microsoft uznał, że ta funkcja jest przestarzała (deprecated):olejarz.com.pl_task_scheduler_1

Można jednak sobie z tym poradzić. Przeszukując internet znalazłem stronę, na której umieszczony jest skrypt w powershell, który poinformuje nas o wystąpieniu błędu.

Do uruchomienia funkcjonalności będziesz potrzebował:

  1. serwera SMTP bez uwierzytelnienia,
  2. Ustawienia możliwości uruchomienia skryptów powershell w systemie (set-executionpolicy) przynajmniej na poziomie “Remotesigned”
  3. Umiejętności uruchamiania skryptów powershell w harmonogramie zadań (opisane m. in. w źródle)

Poniżej cały skrypt skopiowany ze strony źródłowej:

# ————————————-
# Ryadel.com – Powershell script to send an e-mail through the Event Viewer
# ————————————-
#
# To test this script you can use Powershell to write your own test error log entry in the following way:
# ————————————-
# New-EventLog –LogName Application –Source “Test”
# Write-EventLog –LogName Application –Source “Test” –EntryType Error –EventID 1 –Message “This is a test message.”
$event = get-eventlog -LogName Application -newest 1
#get-help get-eventlog will show there are a handful of other options available for selecting the log entry you want.
#example: -source “your-source”
# “Error” – send only error
if ($event.EntryType -eq “Error”)
{
    $PCName = $env:COMPUTERNAME
    $EmailBody = $event | format-list -property * | out-string
    $EmailFrom = “$PCName <noreply@source.address>”
    $EmailTo = “your@destination.address”
    $EmailSubject = “New Event Log [Application]”
    $SMTPServer = “localhost”
    Write-host “Sending Email”
    Send-MailMessage -From $EmailFrom -To $EmailTo -Subject $EmailSubject -body $EmailBody -SmtpServer $SMTPServer
}
else
{
    write-host “No error found”
    write-host “Here is the log entry that was inspected:”
    $event
}

Jak widać skrypt nie jest skomplikowany. Należy ustawić zmienne “$EmailFrom” , “$EmailTo”, “$SMTPServer”, zapisać go jako plik z ozszerzeniem *.ps1 i umieścić w folderze ze skryptami.

Następnie przechodzimy do dziennika zdarzeń (Event Viewer) klikamy na zdarzenie i po prawej stronie wybieramy “Dołącz zadanie do tego zdarzenia” (“Attach Task To This Event…”) i tworzymy zadanie z uruchamianym zadaniem w harmonogramie zadań Windows:olejarz.com.pl_event_viewer_1

Jeśli masz pytania zapraszam do komentowania lub kontaktu.