Отправка E-mail по событиям из Event Viewer в Windows Server 2016

Начиная с Windows Server 2012, создание задачи на отправку электронных писем в Event viewer является deprecated. Единственным вариантом остаётся запуск программы или скрипта, который будет отправлять нам письма.

Создать задачу в планировщике можно выбрав нужное событие в Event viewer и кликнув по Attach task to this event в правой части окна.

При попытке же выбрать этот вариант, появляется ошибка "The task definition uses a deprecated feature":

Используем в качестеве workaround командлет Send-MailMessage в PowerShell, который отправляет почту используя SMTP:

Send-MailMessage `
  -SmtpServer mx.example.com `
  -To admin@example.com `
  -From server@example.com `
  -Subject "Smth happened" `
  -Body "Check it out"

Если у вас в сети нет почтового сервера, в качестве SmtpServer можно указать почтовый сервер адресата. Узнать его можно командой nslookup -type=mx example.com, где example.com - домен адресата после @.

Обратите внимание, что в качестве приветствия EHLO, будет отправлено имя компьютера, а некоторые SMTP-серверы не принимают письма с HELO/EHLO, не содержащими полное доменное имя или IP адрес (возвращают ошибку 550-HELO/EHLO must contain your FQDN or IP literal).

Однако, по-умолчанию, исполнение .ps1 файлов запрещено (выполняется действие по-умолчанию - открыть в Блокноте). Чтобы исправить это, можно изменить следующую групповую политику: Computer Configuration > Policies > Administrative Templates > Windows Components > Windows PowerShell > Turn on Script Execution.

Если делать это нет желания или возможности, можно прибегнуть к следующей хитрости: запускать powershell.exe, передавая наш скрипт в аргументе -Command.

То есть, указать C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe в качестве запускаемой программы, а -Command 'Send-MailMessage -SmtpServer mx.example.com -To admin@example.com -From server@example.com -Subject "Smth happened" -Body "Check it out"' в качестве её аргументов:

Вперед