Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

eventvwr Systemstartzeit und - Endzeit auslesen

Forumthread: eventvwr Systemstartzeit und - Endzeit auslesen

eventvwr Systemstartzeit und - Endzeit auslesen
26.08.2008 13:15:11
Stefan
Hallo Zusammen,
jetzt hab ich mal eine ganz knifflige Sache, welche sich nicht direkt auf Excel bezieht aber in Excel gelöst werden soll.
Ich möchte eine Datei erstellen, welche mit einem Skript direkt aus dem Windows Event-Logger-Daten das jeweils erste und letzte Ereignis eines Tages ausliest und dies Anfangs- und Endzeit in die Datei schreibt.
Ich weiss jedoch zu allererst einmal nicht wie iach auf diese Daten direkt zugreifen kann.
Mal sehen wer sich bei diesem Thema auskennt.
Gruß Stefan
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: eventvwr Systemstartzeit und - Endzeit auslesen
29.08.2008 17:14:00
Tino
Hallo,
beim Googln habe ich ein VBS Script gefunden und dieses auf Excel etwas angepasst.
Einige Parameter habe ich inaktiv gemacht und das Erstelldatum angepasst.
Beim Datum kann es sein, dass es nicht funktioniert, da ich nicht weis ob der Zeitstempel auf jedem System gleich aussieht.
Ich beziehe mich auf die Frage
"Ich weiss jedoch zu allererst einmal nicht wie iach auf diese Daten direkt zugreifen kann"
Die erste Zeile habe ich für die Überschrift frei gelassen.
Modul Modul2
Sub Versuch() 
Dim objWMIService As Object 
Dim colLoggedEvents As Object 
Dim lngRow As Long, strDatum As String 
Dim strMessage As String 
Set objWMIService = GetObject("winmgmts:" _
    & "\\" & "." & "\root\cimv2") 
  
Set colLoggedEvents = objWMIService.ExecQuery _
    ("Select * from Win32_NTLogEvent Where Logfile = 'Application'") 
 
Application.ScreenUpdating = False 
 Range("A2", Cells(Rows.Count, "C")).ClearContents 
 lngRow = 1 
 
For Each objEvent In colLoggedEvents 
lngRow = lngRow + 1 
     
    'Infotext 
    If IsNull(objEvent.Message) = False Then 
        strMessage = objEvent.Message 
        Do While Right$(strMessage, 1) = Chr(10) Or Right$(strMessage, 1) = Chr(13) 
         strMessage = Trim$(Left$(strMessage, Len(strMessage) - 1)) 
        Loop 
        Cells(lngRow, "A") = strMessage 
    End If 
 
    
    ''Datum 
    strDatum = Trim$(objEvent.TimeWritten) 
    If strDatum > "" Then Cells(lngRow, "B") = _
    CDate(Mid(strDatum, 7, 2) & "." & Mid(strDatum, 5, 2) & "." & Mid(strDatum, 1, 4) & " " & _
    Mid(strDatum, 9, 2) & ":" & Mid(strDatum, 11, 2) & ":" & Mid(strDatum, 13, 2)) 
     
    'User 
    Cells(lngRow, "C") = IIf(IsNull(objEvent.User), "", Trim(objEvent.User)) 
 
''andere Parameter**************************** 
'    Debug.Print "Category: " & objEvent.Category 
'    Debug.Print "Computer Name: " & objEvent.ComputerName 
'    Debug.Print "Event Code: " & objEvent.EventCode 
'    Debug.Print "Record Number: " & objEvent.RecordNumber 
'    Debug.Print "Source Name: " & objEvent.SourceName 
'    Debug.Print "Event Type: " & objEvent.Type 
'********************************************** 
     
Next 
Application.ScreenUpdating = True 
End Sub 
 


Überschrift habe ich von Hand eingetragen und so sollte das Ergebnis aussehen.

 ABC
1MessageTimeUser
2Der Benutzerprofildienst wurde erfolgreich gestartet.18.05.2008 07:53NT-AUTORITÄT\SYSTEM
3Der Softwarelizenzierungsdienst wird gestartet.18.05.2008 07:53 

Achtung, es können schnell einige tausend Einträge vorhanden sein, bei mir sind es über 11000.
Gruß Tino

www.VBA-Excel.de


Anzeige
2. Version
29.08.2008 22:39:00
Tino
Hallo,
hier noch eine Möglichkeit, gleiches wie oben beschrieben, aber Logfile System.

Option Explicit
'EventType
'1 Error
'2 Warning()
'3 Information()
'4 Security audit success
'5 Security audit failure
Sub Versuch()
Dim objWMIService As Object
Dim colLoggedEvents As Object
Dim objEvent As Object
Dim lngRow As Long, strDatum As String
Dim strMessage As String
Set objWMIService = GetObject("winmgmts:" _
& "\\" & "." & "\root\cimv2")
Set colLoggedEvents = objWMIService.ExecQuery _
("Select * from Win32_NTLogEvent Where Logfile = 'System'" & _
" and EventType = '3'")
Application.ScreenUpdating = False
Range("A2", Cells(Rows.Count, "C")).ClearContents
lngRow = 1
For Each objEvent In colLoggedEvents
lngRow = lngRow + 1
'Infotext
If IsNull(objEvent.Message) = False Then
strMessage = objEvent.Message
Do While Right$(strMessage, 1) = Chr(10) Or Right$(strMessage, 1) = Chr(13)
strMessage = Trim$(Left$(strMessage, Len(strMessage) - 1))
Loop
Cells(lngRow, "A") = strMessage
End If
''Datum
strDatum = Trim$(objEvent.TimeWritten)
If strDatum > "" Then Cells(lngRow, "B") = _
CDate(Mid(strDatum, 7, 2) & "." & Mid(strDatum, 5, 2) & "." & Mid(strDatum, 1, 4) & " " & _
Mid(strDatum, 9, 2) & ":" & Mid(strDatum, 11, 2) & ":" & Mid(strDatum, 13, 2))
'User
Cells(lngRow, "C") = IIf(IsNull(objEvent.User), "", Trim(objEvent.User))
''andere Parameter****************************
'    Debug.Print "Category: " & objEvent.Category
'    Debug.Print "Computer Name: " & objEvent.ComputerName
'    Debug.Print "Event Code: " & objEvent.EventCode
'    Debug.Print "Record Number: " & objEvent.RecordNumber
'    Debug.Print "Source Name: " & objEvent.SourceName
'    Debug.Print "Event Type: " & objEvent.Type
Next
Application.ScreenUpdating = True
End Sub


Gruß Tino

Anzeige
Logfile nach Datum
30.08.2008 11:06:36
Tino
Hallo,
ich hoffe das ich dies nicht umsonst gemacht habe,
weil auf eine Rückmeldung ich immer noch von dir warte.
Hiermit müsste auch deine erste Frage beantwortet sein.
Hiermit kannst du die Logfiles zu einem bestimmten Datum auslesen.
Modul Modul2
''Logfile =**** 
'Application 
'System 
'Security 
 
''EventType =** 
'1 Error 
'2 Warning() 
'3 Information() 
'4 Security audit success 
'5 Security audit failure 
Sub Versuch() 
Dim objWMIService As Object, colLoggedEvents As Object 
Dim dtmStartDate As Object, dtmEndDate As Object 
Dim strMessage As String, strDatum As String 
Dim lngRow As Long 
Dim SDatum As Date 
 
SDatum = Date 'welches Datum auslesen (heute)? 
 
Set objWMIService = GetObject("winmgmts:" _
    & "\\" & "." & "\root\cimv2") 
  
Const CONVERT_TO_LOCAL_TIME = True 
Set dtmStartDate = CreateObject("WbemScripting.SWbemDateTime") 
Set dtmEndDate = CreateObject("WbemScripting.SWbemDateTime") 
 
dtmStartDate.SetVarDate SDatum, CONVERT_TO_LOCAL_TIME 
dtmEndDate.SetVarDate SDatum + 1, CONVERT_TO_LOCAL_TIME 
 
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2") 
 
Set colLoggedEvents = objWMIService.ExecQuery _
    ("Select * from Win32_NTLogEvent Where TimeWritten >= '" _
    & dtmStartDate & "' and TimeWritten < '" & dtmEndDate & "' and  Logfile = 'System' and EventType = '3'") 
 
 
Application.ScreenUpdating = False 
 Range("A2", Cells(Rows.Count, "C")).ClearContents 
 lngRow = 1 
 
For Each objEvent In colLoggedEvents 
    lngRow = lngRow + 1 
     
    'Infotext 
    If IsNull(objEvent.Message) = False Then 
        strMessage = objEvent.Message 
        Do While Right$(strMessage, 1) = Chr(10) Or Right$(strMessage, 1) = Chr(13) 
         strMessage = Trim$(Left$(strMessage, Len(strMessage) - 1)) 
        Loop 
        Cells(lngRow, "A") = strMessage 
    End If 
 
    
    ''Datum 
    strDatum = Trim$(objEvent.TimeWritten) 
    If strDatum > "" Then Cells(lngRow, "B") = _
    CDate(Mid(strDatum, 7, 2) & "." & Mid(strDatum, 5, 2) & "." & Mid(strDatum, 1, 4) & " " & _
    Mid(strDatum, 9, 2) & ":" & Mid(strDatum, 11, 2) & ":" & Mid(strDatum, 13, 2)) 
     
    'User 
    Cells(lngRow, "C") = IIf(IsNull(objEvent.User), "", Trim(objEvent.User)) 
 
''andere Parameter**************************** 
'    Debug.Print "Category: " & objEvent.Category 
'    Debug.Print "Computer Name: " & objEvent.ComputerName 
'    Debug.Print "Event Code: " & objEvent.EventCode 
'    Debug.Print "Record Number: " & objEvent.RecordNumber 
'    Debug.Print "Source Name: " & objEvent.SourceName 
'    Debug.Print "Event Type: " & objEvent.Type 
'********************************************** 
     
Next 
Application.ScreenUpdating = True 
End Sub 
 


Gruß Tino

www.VBA-Excel.de


Anzeige
AW: Logfile nach Datum
02.09.2008 08:46:29
Stefan
Hallo Tino,
vielen Dank für Deine Hilfe. Ich habe Heute erst wieder den Rechner angeschaltet und eigentlich
gar nicht mehr damit gerechnet, dass mir jemand antwortet.
Leider funktionieren Deine Makros bei mir noch nicht. Ich vermute, dass der Virenscanner damit ein Problem hat, da ich aber in der Arbeit bin und diesen nicht deaktivieren darf, muss ich es Zuhause nochmals ausprobieren.
Ich melde mich dann wieder.
Ciao Stefan
Anzeige
AW: Logfile nach Datum
02.09.2008 16:42:42
Tino
Hallo,
ich dachte schon die Arbeit war für die Katz weil keine Antwort gekommen ist.;-)
Konnte dies heute an mehreren PC‘s testen.
Win Vista mit Kaspersky- geht
Win XP mit Kaspersky- geht
Win XP mit Adminrechte- geht
Win XP ohne Adminrechte- geht
Mehr kann ich dazu nicht sagen, sorry
Gruß Tino

www.VBA-Excel.de


Anzeige
AW: Logfile nach Datum
02.09.2008 17:59:00
Stefan
...Danke erst einmal bis Morgen weiss ich es dann auch ob es bei mir tut oder nicht.
Gruß Stefan
;
Anzeige
Anzeige

Infobox / Tutorial

Systemstartzeit und -Endzeit aus dem Event-Viewer auslesen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu: Klicke im Menü auf Einfügen > Modul.
  3. Kopiere den folgenden VBA-Code in das Modul:
Sub AuslesenEventViewer()
    Dim objWMIService As Object
    Dim colLoggedEvents As Object
    Dim objEvent As Object
    Dim lngRow As Long, strDatum As String
    Dim strMessage As String

    Set objWMIService = GetObject("winmgmts:\\" & "." & "\root\cimv2")
    Set colLoggedEvents = objWMIService.ExecQuery("Select * from Win32_NTLogEvent Where Logfile = 'System' and EventType = '3'")

    Application.ScreenUpdating = False
    Range("A2", Cells(Rows.Count, "C")).ClearContents
    lngRow = 1

    For Each objEvent In colLoggedEvents
        lngRow = lngRow + 1
        If Not IsNull(objEvent.Message) Then
            strMessage = objEvent.Message
            Cells(lngRow, "A") = strMessage
        End If

        strDatum = Trim$(objEvent.TimeWritten)
        If strDatum > "" Then
            Cells(lngRow, "B") = CDate(Mid(strDatum, 7, 2) & "." & Mid(strDatum, 5, 2) & "." & Mid(strDatum, 1, 4) & " " & _
            Mid(strDatum, 9, 2) & ":" & Mid(strDatum, 11, 2) & ":" & Mid(strDatum, 13, 2))
        End If
        Cells(lngRow, "C") = IIf(IsNull(objEvent.User), "", Trim(objEvent.User))
    Next
    Application.ScreenUpdating = True
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Führe das Makro aus: Gehe zu Entwicklertools > Makros, wähle AuslesenEventViewer und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler 1: Zugriff verweigert

    • Lösung: Stelle sicher, dass Du über Administratorrechte verfügst. Dies ist besonders wichtig, wenn Du auf Logfiles zugreifen möchtest.
  • Fehler 2: Keine Daten gefunden

    • Lösung: Überprüfe, ob der Event-Viewer tatsächlich Einträge für den angegebenen Zeitraum hat. Die Filterung nach EventType = '3' bezieht sich auf Informationsmeldungen.

Alternative Methoden

  • PowerShell nutzen: Du kannst auch ein PowerShell-Skript verwenden, um die Systemstartzeit und -endzeit auszulesen. Ein Beispiel-Skript könnte so aussehen:
Get-WinEvent -FilterHashtable @{LogName='System'; ID=6005, 6006} | Format-Table TimeCreated, Message
  • Event Viewer direkt: Du kannst die Daten auch manuell im Event Viewer (eventvwr) überprüfen, indem Du die Protokolle für das System und die entsprechenden Event-IDs durchsuchst.

Praktische Beispiele

Hier ist ein Beispiel, das zeigt, wie die Daten in Excel aussehen könnten, nachdem das VBA-Skript ausgeführt wurde:

Message Time User
Der Benutzerprofildienst wurde erfolgreich gestartet. 18.05.2008 07:53 NT-AUTORITÄT\SYSTEM
Der Softwarelizenzierungsdienst wird gestartet. 18.05.2008 07:53

Tipps für Profis

  • Event ID 4673: Wenn Du spezifische Fehler wie event id 4673 audit failure untersuchen möchtest, kannst Du das Skript anpassen, um diese IDs gezielt auszulesen.
  • Automatisierung: Du kannst das Skript so anpassen, dass es automatisch zu bestimmten Zeiten ausgeführt wird, um die Logdaten regelmäßig zu aktualisieren.

FAQ: Häufige Fragen

1. Wie kann ich die Exportdaten in eine andere Datei speichern?
Du kannst den VBA-Code so anpassen, dass die Daten in eine CSV-Datei exportiert werden. Verwende dazu Open und Print # Anweisungen.

2. Funktioniert das Skript mit allen Windows-Versionen?
Das Skript sollte mit Windows 7 und höher problemlos laufen. Bei älteren Versionen könnten Anpassungen nötig sein.

3. Was ist zu tun, wenn der Virenscanner blockiert?
Setze eine Ausnahme für Excel oder das spezifische Skript in Deinem Virenscanner, um sicherzustellen, dass es ohne Probleme ausgeführt werden kann.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige