Monitorowanie serwera – Powiadomienia email c.d.

Ostatnio pisałem o powiadamianiu w przypadku kończącego się miejsca na dysku serwera. Załatwienie tego okresowym uruchamianiem skryptu ma sens z dwóch powodów. Pierwszy jest taki, że harmonogram systemu Windows nie wspiera już wysyłki email. Drugi jest taki, gdy w eventlogu informacja że kończy się miejsce na dysku pojawi się bardzo późno. Zazwyczaj szybciej dowiemy się od klienta że serwer nie działa prawidłowo. Oczywiście modyfikacja tego progu jest możliwa gdzieś w otchłaniach rejestru systemu ale jaki to ma wpływ na inne usługi … tego nie wiem.

Co zrobić jednak gdy chcemy powiadomić się o konkretnym zdarzeniu, które pojawia się w eventlogu. Jak pokazałem poprzednio, harmonogram systemu umożliwia wyzwalanie zadań w przypadku wystąpienia zdarzenia. Pełni więc on rolę monitora eventloga. Wystarczy więc utworzyć sobie takie zadanie wybierając odpowiedni event jako trigger do jego uruchomienia.

wyzwalacz

Jako zadanie podpinamy skrypt wysyłający email.

Zadeklarowałem w nim kilka podstawowych zmiennych przydatnych w treści email oraz treści zdarzenia które skrypt również umieści w eventlogu. Dzięki temu, po wystąpieniu zdarzenia będziesz widział, jak szybko zadziałało powiadomienie. Aby zdarzenie się zarejestrowało zadanie powiadomienia musi uruchomić się z uprawnieniami administratora. Klikamy więc 'Uruchom z najwyżsymi uprawnieniami”.

Enjoy…

#
#   Email_Notification.ps1
#   Skrypt wysyłający email o konkretnej treści
#   Podepnij go do harmonogramu z triggerem wycelowanym w konkretne zdarzenie z eventlog'a.
#   Skrypt wysyła wiadomość o zdefiniowanej treści i loguje swoje działanie w eventlogu aplikacji.
#
#

# Zmienne  - możesz ich użyć w temacie i treści wiadomości
$TimeStampDate = Get-Date -UFormat "%Y-%m-%d"
$TimeStampTime = Get-Date -UFormat "%H:%M:%S"
$Hostname = (Get-WmiObject Win32_ComputerSystem).Name
$Domain = (Get-WmiObject Win32_ComputerSystem).Domain

# Temat i treść wiadomości
$Subject = "Alert! Na serwerze $Hostname wystąpiło zdarzenie."
$Body = "Na serwerze $Hostname w domenie $Domain wystąpiło zdarzenie [....] . Powiadomienie wysłano o $TimeStampTime dnia $TimeStampDate. Nie odpowiadaj na tego maila."
j na tego maila."

# Dane do maila
$From = "alerty@gmail.com"
$U = $From
$To = "mojemail@gmail.com"
$SMTPServer = "smtp.gmail.com"
$SMTPPort = "587"
$PSW=’Tu wpisz hasło’
$SecurePassword = ConvertTo-SecureString $PSW –AsPlainText –force
$Cred=New-object System.Management.Automation.PSCredential ($U,$SecurePassword)

#zapis zdarzeń do eventlog'a
$Eventlog_Source = "EmailNotify"
$EventID = "10001"
$EventMessage = "Treść zdarzenia rejestrowanego w eventlogu. Możesz korzystać ze zmiennych zadeklarowanych z sekcji Zmienne"


$logSourceExists = [System.Diagnostics.EventLog]::SourceExists($Eventlog_Source) 
if ($logSourceExists -eq $false) {
    New-EventLog -LogName Application -Source $Eventlog_Source
}

Send-MailMessage -From $From -to $To -Subject $Subject -Body $Body -SmtpServer $SMTPServer -port $SMTPPort -UseSsl -Encoding Unicode -Credential (New-object System.Management.Automation.PSCredential $U,$SecurePassword)
write-eventlog -logname Application -source $Eventlog_Source -eventID $EventID -entrytype Information -message $EventMessage -category 1 -rawdata 10,20