none
Powershell: get-eventlog + Send-MailMessage - отправка события в теле письма

    Вопрос

  • Здравствуйте.

    Простая задача: скрипт проверяет наличие событие в журнале ОС. После чего вставляет найденные в тело сообщения. Вложенным файлом не хочу.

    Если сначала события записать в текстовый файл, а затем присвоить значение переменной, данными из текстового файла, то работает. Можно ли при этом обойтись без доп (временного) файла? Число событий по отбору будет небольшим.

    В гугле не нашел, ну или не так искал.

    $mes = Get-EventLog -LogName System -Newest 100 | ?{$_.eventid -eq 1074} - переменной присваиваю значение событий из журнала. Если вбить $mes выдает требуемые события.

    Далее в параметр Send-MailMessage -Body "$mes" - передаем значение переменной.

    В результате на почту приходит текст: System.Diagnostics.EventLogEntry

    Как-то вероятно надо преобразовать значения в переменной $mes?


Ответы

  • $mes[0] | fl -Выберите какие свойства нужны
    
    Select Свойство1,Свойство2,Свойство3 и т.д
    
    $mes = Get-EventLog -LogName System -Newest 100 | ?{$_.eventid -eq 1074} | Select Index,Message

    Send-MailMessage -BodyAsHtml -Body ($mes | ConvertTo-Html)

    Или использовать Out-String, но первый вариант лучше.

    $mes = Get-EventLog -LogName System -Newest 100 | ?{$_.eventid -eq 1074} | Select Index,Message | Out-String


    • Изменено KazunEditor 3 июня 2016 г. 7:09
    • Помечено в качестве ответа Kirill Vakhrushev 3 июня 2016 г. 7:48
    Отвечающий
  • Пропустил Out-String, должно:

    Send-MailMessage -BodyAsHtml -Body ($mes | ConvertTo-Html | Out-String)

    • Помечено в качестве ответа Kirill Vakhrushev 3 июня 2016 г. 7:48
    Отвечающий

Все ответы

  • $mes[0] | fl -Выберите какие свойства нужны
    
    Select Свойство1,Свойство2,Свойство3 и т.д
    
    $mes = Get-EventLog -LogName System -Newest 100 | ?{$_.eventid -eq 1074} | Select Index,Message

    Send-MailMessage -BodyAsHtml -Body ($mes | ConvertTo-Html)

    Или использовать Out-String, но первый вариант лучше.

    $mes = Get-EventLog -LogName System -Newest 100 | ?{$_.eventid -eq 1074} | Select Index,Message | Out-String


    • Изменено KazunEditor 3 июня 2016 г. 7:09
    • Помечено в качестве ответа Kirill Vakhrushev 3 июня 2016 г. 7:48
    Отвечающий
  • С выбором свойств ок. допустим выбрал для проверки только Index.

    В переменную записались индексы выбранные.

    Дальше пробую их отправить.


    Вариант

    Send-MailMessage -BodyAsHtml -Body ($mes | ConvertTo-Html)

    При попытке выполнения ошибка. Что-то видимо связано с структурой в скобках.

    Не удается преобразовать "System.Object[]" в тип "System.String", необходимый для параметра "Body". Указанный метод не поддерживается.

    Вариант

    $mes = Get-EventLog -LogName System -Newest 100 | ?{$_.eventid -eq 1074} | Select Index,Message | Out-String

    Всё пришло.

  • Пропустил Out-String, должно:

    Send-MailMessage -BodyAsHtml -Body ($mes | ConvertTo-Html | Out-String)

    • Помечено в качестве ответа Kirill Vakhrushev 3 июня 2016 г. 7:48
    Отвечающий