PowerShell - есть проблемы с использованием метода Count - PullRequest
0 голосов
/ 19 января 2012

У меня есть следующий код (благодаря вводу 'jon Z' и 'manojlds'), который обрабатывает списки серверов, проверяет журналы ошибок для каждого сервера по строке поиска, а затем отправляет отчет по электронной почте, в котором перечислены серверы с ошибками.Журналы ошибок и хорошие журналы ошибок.

Я хотел бы сейчас сделать подсчет числа серверов с плохими журналами ошибок и хорошими журналами ошибок и поместить эту информацию в электронное письмо.отчет также.

У меня было бы что-то подобное в каждом заголовке моего почтового отчета:

Следующие n серверы имеют ошибочные журналы ошибок:

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

Я пытался сделать это с помощью метода Count, но имеюдо сих пор не удалось.Является ли метод Count правильным подходом?Это так, как (где бы я применил это в моем коде)?Если нет, то какой подход лучше?

Код:

$BadServerLogs = "<font style=`"font-family:verdana;font-size:9pt`"><p><b>The following servers have bad error logs:</b></p>"
$GoodServerLogs = "<font style=`"font-family:verdana;font-size:9pt`"><p><b>The following servers are OK:</b></p>"

# Use hash table to associate server list to search string array
$Groups = @{
$SERVER_LST_1=$SEARCH_STR_ARRAY_1;
$SERVER_LST_2=$SEARCH_STR_ARRAY_2;
$SERVER_LST_3=$SEARCH_STR_ARRAY_3;
$SERVER_LST_4=$SEARCH_STR_ARRAY_4;
}
$StartupErrors = @{}
$Groups.keys | %{
$key = $_
gc $key | %{
    # Check StartupError.log files for errors
    $StartupErrors[$_] = Get-ChildItem -Path \\$_\$LOG_PATH -Include StartupError.log -Recurse | Select-String -notmatch $Groups["$key"]
    If ($StartupErrors[$_])
    {
        $Subject = "StartupError Logs Report: BAD ERROR LOGS!"
        $BadServerLogs += "<li><a href=`"\\$_\$LOG_PATH\StartupError.log`">$_</a></li>"
    }
    Else 
    { 
        $Subject = "StartupError Logs Report: All Logs are Fine"
        $GoodServerLogs += "<li>$_</li>" 
    }
}   
}
# Send email listing servers with bad/good StartupError log files
Send-MailMessage -Body "$BadServerLogs $GoodServerLogs" -BodyAsHtml -Subject $Subject -SmtpServer $SmtpServer -To $MailTo -From $MailFrom

Заранее спасибо!-Keith

1 Ответ

4 голосов
/ 19 января 2012

Вы можете просто создать две переменные:

$goodCount = 0
$badCount = 0

Затем в цикле увеличивается каждый в зависимости от случая:

If ($StartupErrors[$_])
{
    $Subject = "StartupError Logs Report: BAD ERROR LOGS!"
    $BadServerLogs += "<li><a href=`"\\$_\$LOG_PATH\StartupError.log`">$_</a></li>"
    $badCount += 1
}
Else 
{ 
    $Subject = "StartupError Logs Report: All Logs are Fine"
    $GoodServerLogs += "<li>$_</li>"
    $goodCount += 1
}

Затем создайте HTML-код и отправьте его:

$html = "<h1>The following $badCount servers have bad error logs:</h1>" + $BadServerLogs
$html += "<h1>The following $goodCount servers are OK:</h1>" + $GoodServerLogs

Send-MailMessage -Body $html -BodyAsHtml -Subject $Subject -SmtpServer $SmtpServer -To $MailTo -From $MailFrom
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...