Уведомление на e-mail при наступлении события в Eventlog

Дано:
Серверы: Windows Server 2008 R2, Windows Server 2012

Задача:
Настроить уведомления по e-mail администратору на примере события перезагрузки серверов.

Решение:
Нам понадобится: скрипт, который отправляет email, скрипт, который выводит содержание интересующих нас событий, задание и учетная запись, от имени которой исполняются скрипт и задание. Решение будет развернуто через групповую политику.
По условиям задачи нас интересует событие с ID 1072 из журнала System.

Часть 1. Настройка учетной записи пользователя, от имени которого будут выполняться скрипты и задания.

1. Создаем в AD пользователя monitoring, создаем ему почтовый ящик.
2. Создаем группу Monitoring_group
3. Создаем (или открываем) групповую политику, привязанную к OU, содержащую интересующие нас серверы, назовем ее events.
3.1.  (Политика компьютера – политики – конфигурация Windows – Параметры безопасности – Группы с ограниченным доступом):
Создаем группу Monitoring_Group (выбираем из списка), содержащую в себе пользователя Monitoring и входящую в состав группы Eventlog Readers (чтение журнала событий)
3.2.  (Политика компьютера – политики – конфигурация Windows – Параметры безопасности – Локальные Политики – Назначение прав пользователя):
3.3. Разрешаем свежепровозглашенной группе вход в качестве пакетного задания.

Часть 2. Настройка отсылки e-mail сообщений.

В Windows Server 2012 функция отсылки электронного сообщения при наступлении определенного события в eventlog упразднена. Вместо нее рекомендуется использовать powershell. В 2008 R2 функция работает, однако мы оставим ее в покое и будем использовать более универсальную процедуру.

Напишем универсальный скрипт events.ps1, который будет выбирать нужные события из журнала и посылать их по электронной почте, разместим его в сети, убедившись, что у пользователя monitoring есть к нему доступ на чтение.

events.ps1
# BY Natalia Ivanova
# Скрипт для отсылки писем по определенному событию в домене domain
# с адреса monitoring@domain
# Внимание! требует аргументов:
# 1. Имя журнала
# 2. ID события
# 3. Тема сообщения (в кавычках)
$logname1 = $Args[0]
$eid = $Args[1]
$subj = $Args[2]
# Делаем запрос к журналу событий, скрипт запрашивает все события с определенным ID за час.
$output=get-eventlog -logname $logname1 -after ((get-date).subtract((new-timespan -hours 1))) | where {$_.eventID -eq $eid}
#------------------------------------------------------------------
#Function to send email notification
#------------------------------------------------------------------
function EmailNotification()
{
#Sender email
$Sender = "monitoring@domain"
#Receipt email
$Receipt = "admin@domain"
#SMTP Server
$Server = "smtpserver.domain"
#Mail subject
$Object = $env:computername+": "+$subj+" "+(Get-Date)
#Mail content
$Content = $output | fl | out-string #| ConvertTo-Html -As List | Out-String
$SMTPclient = new-object System.Net.Mail.SmtpClient $Server
#Specify SMTP port if needed #$SMTPClient.port = 587
#Activate SSL if needed
#$SMTPclient.EnableSsl = $true
#Specify email account credentials if needed
$SMTPAuthUsername = "monitoring"
$SMTPAuthPassword = "password"
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($SMTPAuthUsername, $SMTPAuthPassword)
$Message = new-object System.Net.Mail.MailMessage $Sender, $Receipt, $Object, $Content
$Message.IsBodyHtml = $true;
$SMTPclient.Send($Message) }
#Calling function
EmailNotification 

Часть 3. Настроим назначенное задание, которое будет выполняться по событию

В групповой политике events (см Часть 1) создадим задание “eventifreboot”:
(Политика компьютера – политики – Настройка – параметры панели управления – Назначенные задания)
вкладка Общие: выбираем нашего пользователя monitoring, чтобы задание выполнялось от его имени, ставим флажок “выполнять вне зависимости от регистрации пользователя”
вкладка Триггеры: создаем “по событию”, журнал System, источник USER32, код события 1074
вкладка Действия:
запуск программы
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe“,
аргументы
” -noprofile -ExecutionPolicy bypass -command \\PATHtoSCRIPT\events.ps1 System 1074 “Перезагрузка/выключение” ”

Готово.

Аналогичным образом можно настроить уведомления и на другие события из журнала.