Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » PowerShell

Модерирует : KLASS, IFkO

KLASS (06-03-2018 00:43): Объединение тем по сценариям: Сценарии Windows
 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору


Код:
#  v4.0
# =====================
# ==================== Константы - начало
# =====================
# Частота вызова скрипта
# $Interval  - частота вызова в единицах, заданных в $IntervalSelector
# $IntervalSelector - временной интервал
#    h - часы
#    n - минуты
#    d - дни (default)
#    m - месяцы
$strComputerName      = $Env:ComputerName
 
$iInterval            = 1
$strIntervalSelector  = 'd'
$bLastTime            = $True
 
$strEMailDomain       = 'Firma.Com'
$strEMailTo           = 'Administrator@' + $strEMailDomain
$strEMailFrom         = '@EventLog.'     + $strEMailDomain
$strSMTPHost          = 'SMTP.'          + $strEMailDomain
$strEMailFrom         = $strComputerName + $strEMailFrom
$iSMTPPort            = 25
 
$strDateFormat        = 'dd/MM/yy, HH:mm'
 
#$UTF8                = New-Object System.Text.UTF8Encoding
$cdrUTF8              = [System.Text.Encoding]::UTF8
$eletError            = [System.Diagnostics.EventLogEntryType]::Error
$eletInfo             = [System.Diagnostics.EventLogEntryType]::Information
$eletWarn             = [System.Diagnostics.EventLogEntryType]::Warning
$eletSA               = [System.Diagnostics.EventLogEntryType]::SuccessAudit
# =====================
# ==================== Константы - конец
# =====================
 
For ($i=0;$i -lt $Args.Count;$i++)
  {
    If ($Args[$i] -eq '-Time') { $iInterval=$Args[$i+1] }
    If ($Args[$i] -eq '-S') { $strIntervalSelector=$Args[$i+1] }
    If ($Args[$i] -eq '-DateTime') { $bLastTime=$False }
    If ($Args[$i] -imatch '[?]')
      {
          Write-Color '
<TDarkRed_>Выборка из журнала событий ошибок и предупреждений (v4.0)
 
<TYellow_>Get-EventLogEW <TWhite_>[-DateTime] | [-Time <N>] [-S <interval>] [-?|/?]
  <TBlue_>где:
    <TMagenta_>-?/? <TWhite_>      - вызов данной справки
    <TMagenta_>-DateTime <TWhite_> - Анализ журнала событий не от времени последнего запуска скрипта
                 А за явно указанный промежуток времени
                 По умолчанию в скрипте прописаны последние сутки
                 см. ключи <TYellow_>-Time <TWhite_>и <TYellow_>-S
    <TMagenta_>-Time <TCyan_><N><TWhite_>  - Указывает сколько времени анализировать (по умолчанию 1)
    <TMagenta_>-S <TCyan_><str><TWhite_>   - Указывает в каких временных единицах считать интервал
                 По умолчанию <TYellow_>d<TWhite_> - дни
                 Может принимать значения:
             <TYellow_>h<TWhite_> - часы
             <TYellow_>n<TWhite_> - минуты
             <TYellow_>d<TWhite_> - дни (по умолчанию)
             <TYellow_>m<TWhite_> - Месяцы
Ключи <TYellow_>-Time,-S<TWhite_> без ключа <TYellow>-DateTime<TWhite_> - не играют роли
вместе с ним могут использоваться по раздельности
Ключ <TYellow_>-DateTime<TWhite_> без ключей <TYellow_>-Time,-S<TWhite_> берет интервал в 1 сутки
Исключение составляет первый запуск скрипта - в этом случае
всегда используется интервал либо явно прописанный в командной строке,
либо по умолчанию'
        Exit
      }
  }
 
$Tmp    = Get-Item hklm:\software\PowerShellScript\Get-EventLogEW -Force -ErrorAction SilentlyContinue
$TmpCnt = ($Tmp | Get-Member -ErrorAction SilentlyContinue).Count+0
 
If ($TmpCnt -eq 0)  
  {  
    $tmp=New-Item -Path HKLM:\SOFTWARE\PowerShellScript\Get-EventLogEW -Force -ErrorAction SilentlyContinue  
  }
 
$dtNow=Date
If ($strIntervalSelector -eq 'h')
  {
    $dtPrev=$dtNow.AddHours(-$iInterval)
  }
  ElseIf ($strIntervalSelector -eq 'n')
  {
    $dtPrev=$dtNow.AddMinutes(-$iInterval)
  }
  ElseIf ($strIntervalSelector -eq 'm')
  {
    $dtPrev=$dtNow.AddMonths(-$iInterval)
  }
  Else
  {
    $dtPrev=$dtNow.AddDays(-$iInterval)
  }
 
$rgKeyPr    = Get-ItemProperty -Path HKLM:\SOFTWARE\PowerShellScript\Get-EventLogEW -Name Date -ErrorAction SilentlyContinue
$rgKeyPrCnt = ($rgKeyPr | Get-Member -ErrorAction SilentlyContinue).Count+0
 
If ($rgKeyprCnt -eq 0)
  {
    Set-ItemProperty -Path HKLM:\SOFTWARE\PowerShellScript\Get-EventLogEW -Name Date $dtPrev
  }
 
if ($bLastTime -eq $True)
  {
    $strTmp=(New-Object -ComObject WScript.Shell).RegRead('HKLM\SOFTWARE\PowerShellScript\Get-EventLogEW\Date')
    $dtPrev = Get-Date -Date $strTmp
    $dtPrev=$dtPrev.AddMinutes(-2)
  }
Set-ItemProperty -Path HKLM:\SOFTWARE\PowerShellScript\Get-EventLogEW -Name Date $dtNow.ToString('dd/MM/yyyy HH:mm:ss') -Force -ErrorAction SilentlyContinue
 
$objEventLogs=Get-EventLog -List
$iCountErrTotal=0
For($i=0;$i -lt $objEventLogs.Count;$i++)
  {
    $objEventLog              = $objEventLogs.Get($i)
    $objEventLogMessages      = Get-EventLog $objEventLog.Log  
    $objEventLogMessages      = $objEventLogMessages | Where-Object {$_.TimeWritten -le $dtNow -and $_.TimeWritten -ge $dtPrev}
    $objEventLogMessages      = $objEventLogMessages | Where-Object {$_.EntryType -ne $eletInfo -and $_.EntryType -ne $eletSA}
    $iCountErrCurrentEventLog = 0
    $strBodyText              = ''
    $iCountErrCurrentEventLog += $objEventLogMessages.Count
    $iCountErrTotal           += $objEventLogMessages.Count
    For($j=0;$j -lt $objEventLogMessages.Count;$j++)
      {
        $objEventLogMessage   = $objEventLogMessages[$j]
        $objEventLogMessage.EntryType
        If ($objEventLogMessage.EntryType -eq $eletInfo) {'Info'} Else {'No info'}
        If ($j -eq 0)
          {
            $strBodyText = $strBodyText+('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">')
            $strBodyText = $strBodyText+('<html>')
            $strBodyText = $strBodyText+('<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />')
            $strBodyText = $strBodyText+('<head><title>'+$strMsg+'</title>')
            $strBodyText = $strBodyText+('</head>')
            $strBodyText = $strBodyText+('<h2 align="center">'+$strHeaderHTML+'</h2>')
            $strBodyText = $strBodyText+('<table width="100%" border="1" cellspacing="2" cellpadding="2"  align="center">')
            $strBodyText = $strBodyText+('<tr><th>№</th><th>Тип</th><th>Дата</th><th>Время</th><th>Комп</th><th>Пользователь</th><th>Сообщение</th></tr>')
          }
        $strMsg        = 'Журнал ['+$objEventLog.LogDisplayName+'] за период ['+$dtPrev.ToString($strDateFormat)+" .. "+$dtNow.ToString($strDateFormat)+']'
        $strHeaderHTML = 'Журнал ['+$objEventLog.LogDisplayName+']<br>за период ['+$dtPrev.ToString($strDateFormat)+" .. "+$dtNow.ToString($strDateFormat)+']'
        $strBodyText   = $strBodyText+('<tr align="left">')
        $strBodyText   = $strBodyText+('<td>'+$j+'</td>')
        $strBodyText   = $strBodyText+('<td>'+$objEventLogMessage.get_EntryType().ToString()+'<br>'+$objEventLogMessage.Source+"<br>"+$objEventLogMessage.EventID+'</td>')
        $strBodyText   = $strBodyText+('<td>'+$objEventLogMessage.TimeWritten.ToString('dd/MM/yyyy')+'</td>')
        $strBodyText   = $strBodyText+('<td>'+$objEventLogMessage.TimeWritten.ToString('HH:mm:ss')+'</td>')
        $strBodyText   = $strBodyText+('<td>'+$objEventLogMessage.MachineName+'&nbsp;</td>')
        $strBodyText   = $strBodyText+('<td>'+$objEventLogMessage.UserName+'&nbsp;</td>')
        $strBodyText   = $strBodyText+('<td>'+$objEventLogMessage.Message+'</td>')
        $strBodyText   = $strBodyText+('</tr>')
    }
  If ($iCountErrCurrentEventLog -gt 0)
    {
      $strBodyText         = $strBodyText+('</table>')
      $strBodyText         = $strBodyText+('</body>')
      $strBodyText         = $strBodyText+('</html>')
      $SMTPClient          = new-object System.Net.Mail.SMTPClient
      $Msg                 = new-object System.Net.Mail.MailMessage
      $Msg.From            = $strEMailFrom
      $Msg.Subject         = $strComputerName+': '+$strMsg
      $Msg.IsBodyHTML      = 1
      $Msg.BodyEncoding    = $cdrUTF8  
      $Msg.Body            = $strBodyText
      $SMTPClient.Host     = $strSMTPHost
      $SMTPClient.Port     = $iSMTPPort
      $Msg.To.Add($strEMailTo)
      $SMTPClient.Send($Msg)
    }
  }
 
If ($iCountErrTotal -eq 0)
  {
    $strMsg          = $strComputerName+': За период ['+$dtPrev.ToString($strDateFormat)+" .. "+$dtNow.ToString($strDateFormat)+'] ошибок и предупреждений в журнале событий нет'
    $SMTPClient      = new-object System.Net.Mail.SMTPClient
    $Msg             = new-object System.Net.Mail.MailMessage
    $Msg.From        = $strEMailFrom
    $Msg.Subject     = $strMsg
    $Msg.Body        = $strMsg
    $SMTPClient.Host = $strSMTPHost
    $SMTPClient.Port = $iSMTPPort
    $Msg.To.Add($strEMailTo)
    $SMTPClient.Send($Msg)  
  }
 

 
Получение справки по скрипту
get-EventLogEW.ps1 /?
Внимание! Для получения справки требуется наличие Write-Color

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 13:58 04-08-2007 | Исправлено: KapralBel, 13:59 04-08-2007
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » PowerShell
KLASS (06-03-2018 00:43): Объединение тем по сценариям: Сценарии Windows


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru