none
Оповещения на email о событиях RRS feed

  • Вопрос

  • Подскажите, как сделать, чтобы при наступлении некоторых событий, например перезагрузка сервера приходило оповещение на email.

    Спасибо.

Ответы

  • Вообщем может кому пригодится, окончательный вариант уведомления о перезагрузке сервера:

    Set WshNetwork = WScript.CreateObject("WScript.Network")

    Set objEmail = CreateObject("CDO.Message") 

    objEmail.From = WshNetwork.ComputerName & "@domain.ru"
    objEmail.To = "recipient@domain.ru" 
    objEmail.Subject = "Сервер " & WshNetwork.ComputerName & " был перезагружен"
    objEmail.Textbody = "Событие произошло: " & Date & " в " & Time
    objEmail.Configuration.Fields.Item _ 
    ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
    objEmail.Configuration.Fields.Item _ 
    ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _ 
    "smtp_server_address" 
    objEmail.Configuration.Fields.Item _ 
    ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 
    objEmail.Configuration.Fields.Update 
    objEmail.Send

    В уведомление включается имя сервера, дата, время.

    В планировщике создаем задачу > выполнять при загрузке сервера > выполнять от пользователя "Система"

    • Предложено в качестве ответа proxzy 31 мая 2013 г. 9:28
    • Помечено в качестве ответа SolenoidEditor 31 мая 2013 г. 10:01

Все ответы

  • Добрый день.

    В Event Viwer найти нужное событие, правой кнопкой - Attach task to this event - выбрать - send e-mail - заполнить все нужные поля.


    Печенкин Николай

    • Предложено в качестве ответа proxzy 30 мая 2013 г. 13:44
    • Отменено предложение в качестве ответа antfirefly 31 мая 2013 г. 4:22
  • Хотел бы дополнить: не все события регистрируются по умолчанию. Возможно вам придется активировать аудит через групповые политики (Конфигурация компьютера/Конфигурация Windows/Параметры Безопасности/Локальные политики/Политика Аудита)


  • Не работает в 2012 сервере эта возможность.
  • Все работает, но надо помнить:

    ""Send an e-mail" is a deprecated action in Windows Server 2012 task scheduler, which means it is still functional but will likely be removed in a future version of the operating system. Note that PowerShell 3.0 provides a Send-MailMessage cmdlet as an alternative moving forward, and we find that most IT Pros either have moved or are moving to PowerShell for scripts being run via scheduled tasks." (Что, можно перевести как: "Отправка сообщений в Windows Server 2012 - "устаревшая функция", что значит, что она по прежнему работает, но будет убрана в последующих версиях ОС. Обратите внимание, что через командлет PowerShell 3.0 Send-MailMessage вы также можете отправлять сообщения по почте, и мы считаем, что большинство специалистов, которые стараются изучить или уже изучили PowerShell, будут использовать именно этот командлет в своих запланированных событиях". ) Информация отсюда.

    Соответственно, если она у вас не работает, то это означает, что вы либо не правильно ее сконфигурировали, либо у вас проблема с фаерволлом на одном из серверов, либо проблема с настройкой smtp сервера. Можете как альтернативу использовать выше приведенный командлет - но, вероятно, вам это не поможет, пока вы не найдете в чем именно проблема с отправкой почты.


    Практика показала, что это функция из коробки не работает. 
    • Изменено proxzy 31 мая 2013 г. 5:49 ссылка на информацию
  • Вы пробовали сконфигурировать до конца, у вас создалась задача ?
  • Попробовал запустить на тестовой системе - вывалилось с ошибкой 2147750704. И как выяснилось это типичная ошибка для windows 8/server 2012. Никакой официальной информации по поводу депрецированной функции и почему она не работает(и зачем она отображается), мне найти не удалось.

    Из вариантов решения проблемы могу предложить почитать тут (предлагают поставить простенькую программу которая будет слать сообщения, есть примеры)

    или тут

    Предлагают использовать следующий PowerShell скрипт:

    #------------------------------------------------------------------ 
    #Function to send email notification 
    #------------------------------------------------------------------  
    function EmailNotification() 
    { 
     #Sender email 
     $Sender = "sender.at.corpnet.net" 
     
     #Receipt email 
     $Receipt = "receipt.at.contoso.com" 
     
     #SMTP Server 
     $Server = "smtp.corpnet.net" 
      
    #Mail subject 
     $Object = $env:computername+": Title text "+(Get-Date) 
      
    #Mail content 
     $Content = Get-WBJob -Previous 1 | 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 = "login" 
     #$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) 
    } 

    или тот самый командлет, который я приводил выше.

    Еще видел сообщения что вроде как если локально установлен smtp, то начинает работать - если вам не лениво можете проверить - но с трудом представляю зачем нужен такой функционал в производственной среде :/

    Извеняюсь, что попытался ввести вас в заблуждение и хорошо, что вы туда не ввелись :) Интересно, что на технете о том, что это больше не работает, нет ни слова.





    • Изменено proxzy 31 мая 2013 г. 6:04 о технете
  • Ну да, я не просто так спрашивал (тут тоже есть)

    Вариантов отправки письма масса: и локальная smtp служба, и коннектор на exchange с анонимной отправкой и сторонние утилиты, типа sendmail.exe и Powershell или вообще простой скрипт vbs:

    Set objEmail = CreateObject("CDO.Message") 

    objEmail.From = "sender@domain.ru" 
    objEmail.To = "recipient@domain.ru" 
    objEmail.Subject = "Тема сообщения" 
    objEmail.Textbody = "Текст сообщения" 
    objEmail.Configuration.Fields.Item _ 
    ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
    objEmail.Configuration.Fields.Item _ 
    ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _ 
    "smtp_server" 
    objEmail.Configuration.Fields.Item _ 
    ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 
    objEmail.Configuration.Fields.Update 
    objEmail.Send

    Но даже это почему то не помогает:

    на тестовой системе делаю "жесткий" рестарт, после загрузки нахожу в журнале:

    System_Microsoft-Windows-Kernel-Power_41 (Система перезагрузилась, завершив работу неполностью. Возможные причины ошибки: система перестала отвечать на запросы, произошел критический сбой или неожиданно отключилось питание.)

    привязываю задачу к событию, выполнение ставлю от "система" и указываю выполнить программу, например тот же Vbs скрипт. Делаю рестарт, но оповещение не приходит, в журнале ошибок нет. Если вручную запустить скрипт или саму задачу - всё работает. Никак не могу понять, в чем дело

  • предположу что на момент генерации события не инициализирована сеть.
    • Предложено в качестве ответа proxzy 31 мая 2013 г. 6:14
  • Да, похоже на то, спасибо: привязал задачу к рестарту службы DHCP, перезапустил - всё работает...

    P.S. Дополню: скорее всего это связано не с инициализацией сети, а службой планировщика заданий, так как сначала возникает событие от Kernel-Power, а потом запускается служба планировщика заданий.

    • Изменено antfirefly 31 мая 2013 г. 6:46
  • Вообщем может кому пригодится, окончательный вариант уведомления о перезагрузке сервера:

    Set WshNetwork = WScript.CreateObject("WScript.Network")

    Set objEmail = CreateObject("CDO.Message") 

    objEmail.From = WshNetwork.ComputerName & "@domain.ru"
    objEmail.To = "recipient@domain.ru" 
    objEmail.Subject = "Сервер " & WshNetwork.ComputerName & " был перезагружен"
    objEmail.Textbody = "Событие произошло: " & Date & " в " & Time
    objEmail.Configuration.Fields.Item _ 
    ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
    objEmail.Configuration.Fields.Item _ 
    ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _ 
    "smtp_server_address" 
    objEmail.Configuration.Fields.Item _ 
    ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 
    objEmail.Configuration.Fields.Update 
    objEmail.Send

    В уведомление включается имя сервера, дата, время.

    В планировщике создаем задачу > выполнять при загрузке сервера > выполнять от пользователя "Система"

    • Предложено в качестве ответа proxzy 31 мая 2013 г. 9:28
    • Помечено в качестве ответа SolenoidEditor 31 мая 2013 г. 10:01