Option Explicit

Private Const FromAddress = "server@home"
Private Const ToAddress = "dbraunschweig@home.com"

Main

Private Sub Main()
    Dim Locator
    Dim Service
    Dim WQL
    Dim Events
    Dim E
    Dim Mail

    Set Locator = CreateObject("WbemScripting.SWbemLocator")
    Set Service = Locator.ConnectServer

    WQL = "SELECT * from Win32_NTLogEvent WHERE TimeGenerated >= " & _
        FormatQueryDate(Date() - 1) & " AND " & _
        "(Type = 'warning' OR Type = 'error' OR Type = 'audit failure')"
    Set Events = Service.ExecQuery(WQL)
    Mail = "Computer, Log, Type, Date, Time, Source, Category, Event, User, Message" & vbCrLf & vbCrLf
    For Each E In Events
        Mail = Mail & FormatEvent(E) & vbCrLf & vbCrLf
    Next
    SendMail Mail
End Sub

Private Function FormatQueryDate(Date)
    Dim Result

    Result = Year(Date)
    If Len(Month(Date)) = 1 Then
        Result = Result & "0" & Month(Date)
    Else
        Result = Result & Month(Date)
    End If
    If Len(Day(Date)) = 1 Then
        Result = Result & "0" & Day(Date)
    Else
        Result = Result & Day(Date)
    End If
    FormatQueryDate = Result
End Function

Private Function FormatEvent(E)
    Dim ComputerName
    Dim Logfile
    Dim EventType
    Dim Date
    Dim Time
    Dim Source
    Dim Category
    Dim EventCode
    Dim User
    Dim Message

    ComputerName = E.ComputerName
    Logfile = E.Logfile
    EventType = UCase(Left(E.Type, 1)) & Mid(E.Type, 2)
    Date = FormatDate(E.TimeGenerated)
    Time = FormatTime(E.TimeGenerated)
    Source = E.SourceName
    Category = E.CategoryString
    If IsNull(Category) Then
	Category = "None"
    End If
    EventCode = E.EventCode
    User = E.User
    If IsNull(User) Then
	User = "N/A"
    End If
    Message = FormatMessage(E.Message)
    FormatEvent = ComputerName & ", " & Logfile & ", " & EventType & ", " & Date & ", " & Time & ", " & _
	Source & ", " & Category & ", " & EventCode & ", " & User & ", " & Message
End Function

Private Function FormatDate(Date)
    Dim D
    
    D = DateSerial(Left(Date, 4), Mid(Date, 5, 2), Mid(Date, 7, 2))
    FormatDate = FormatDateTime(D, vbShortDate)
End Function

Private Function FormatTime(Date)
    Dim T
    
    T = TimeSerial(Mid(Date, 9, 2), Mid(Date, 11, 2), Mid(Date, 13, 2))
    FormatTime = FormatDateTime(T, vbLongTime)
End Function

Private Function FormatMessage(Message)
    Dim Result
    
    Result = Message
    If IsNull(Result) Then
        Result = "Unknown"
    End If
    FormatMessage = Replace(Result, vbCrLf, " ")
End Function

Private Sub SendMail(Mail)
    Dim NM

    Set NM = WScript.CreateObject("CDONTS.NewMail")
    NM.From = FromAddress
    NM.To = ToAddress
    NM.Subject = "Event Log For " & Date() - 1
    NM.Body = Mail
    NM.Send
End Sub

