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.
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
