В PowerShell, как отправлять почту и перечислять в теле письма список обнаруженных ошибок - PullRequest
2 голосов
/ 14 января 2012

У меня есть следующий фрагмент кода из моего скрипта PowerShell, который ...

  • Выполняет цикл по списку серверов
  • Имеет ли Select-String -notmatch в журнале ошибок накаждый сервер
  • Отмечает сервер, если журнал ошибок плохой, и выдает ОК, если журнал ошибок в порядке

Я также хотел бы отправить отчет по электронной почтеэто перечисляет каждый из обнаруженных журналов ошибок в списке, а также перечисляет все серверы, журналы ошибок которых в порядке.Примерно так в теле письма:

Журналы ошибок на следующих серверах:

  • Сервер3
  • Сервер6
  • Сервер14

Следующие серверы в порядке:

  • Сервер1
  • Сервер2
  • Сервер5

Вот мой фрагмент кода:

$Servers = Get-Content $ServerLst
ForEach ($Server in $Servers)
{
   $ErrorLog = Get-ChildItem -Path \\$Server\$LOG_PATH -Include Error.log -Recurse | Select-String -notmatch $SEARCH_STR
   If ($ErrorLog)
   {
    Write-Host "Bad Error Log found at $Server!"
   }
   Else
   {
    Write-Host "Error log is OK."           
   }
}

Полагаю, мне понадобится функция Send-Mail, в которой я буду передавать имена серверов с ошибочными журналами ошибок и т. Д. Однако я не совсем уверен, как к этому подойти.

Любые великие идеи будут с благодарностью.Спасибо!

Ответы [ 2 ]

2 голосов
/ 14 января 2012

Если вы используете Powershell V1, используйте эту функцию из Поваренной книги Powershell для отправки почты. В Powershell V2 вы можете отправлять почту, используя Send-MailMessage .

$Servers = Get-Content $ServerLst
$Bad = "The following servers have bad error logs:`n`n"
$OK = "`nThe following servers are OK:`n`n"
ForEach ($Server in $Servers)
{
   $ErrorLog = Get-ChildItem -Path \\$Server\$LOG_PATH -Include Error.log -Recurse | Select-String -notmatch $SEARCH_STR
   If ($ErrorLog)
   {
    $Bad += "`t - $Server`n"
   }
   Else
   {
    $OK += "`t - $Server`n"           
   }
}
Send-MailMessage -Body "$Bad $OK" -Subject "Bad Logs" -SmtpServer $servername -To $to -From $from  

Примечание: Параметр smtpserver в функции поваренной книги Powershell называется smtphost.

1 голос
/ 14 января 2012

Вам нужно будет сделать функцию самостоятельно, но вот некоторый псевдокод:

Function SendMail
{
    Param(...your params here)

    ...send the mail...


}

<...

Your code to check all your servers

You need to save your errors or issues to an array or hashtable.  
I'll assume you use a 2-field array called $ErrArray

...>

# Now at the end you build a string for the body of the email to incorporate your errors

$StrBody = "Bad Error Log Report`n`n"

$ErrArray | ForEach-Object {$StrBody = $Strbody + "`n$($_[0]) server had an issue: $($_[1])`n"}

SendMail $EmailTo $EmailSubject $StrBody

Итак, разбивка:

  • Сделать функцию почты
  • Сохранение результатов вашего анализа в массиве или хеш-таблице.
  • Перебор объекта результатов и добавление каждой записи результатов в строку для вашей электронной почты
  • Вызов функции электронной почты
...