Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Eventlog aktuellsten Event auslesen

Frage Entwicklung VB for Applications

Mitglied: djbazo

djbazo (Level 1) - Jetzt verbinden

02.06.2010 um 14:17 Uhr, 6961 Aufrufe, 12 Kommentare

Ich möchte per VBS aus dem Eventlog den aktuellsten Wert angezeigt bekommen.

leider funktioniert jedoch mein Skript nicht wie ich möchte.

Speziell gehts mir darum, das ganze nach Datum (TimeWritten) aktuellste-älteste anzeigen zu lassen und das ganze auf 1 Datensatz zu begrenzen (LIMIT)

Vielleicht kann mir jemand auf die Sprünge helfen.



01.
Set objWMIService = GetObject("winmgmts:" & "\\" & "localhost" & "\root\cimv2") 
02.
 
03.
Set colLoggedEvents = objWMIService.ExecQuery _ 
04.
("Select * from Win32_NTLogEvent Where ( EventType='1' OR EventType='2' OR EventType='3' OR EventType='4' ) and SourceName='WMI' ORDER BY TimeWritten DESC LIMIT 1") 
05.
 
06.
For Each objEvent In colLoggedEvents 
07.
 
08.
    last_Message = objEvent.Message 
09.
	wscript.echo last_Message 
10.
Next
Danke & GRuss
Mitglied: Edi.Pfisterer
02.06.2010 um 15:23 Uhr
Hallo!
Nachdem Dir innerhalb der letzten Stunde niemand geantwortet hat, versuch ichs mal...
(Könnte natürlich auch an der fehlenden Begrüßung Deinerseits liegen, aber lassen wir das mal beiseite)

01.
Set objWMIService = GetObject("winmgmts:" & "\\" & "localhost" & "\root\cimv2") 
02.
 
03.
Set colLoggedEvents = objWMIService.ExecQuery _ 
04.
("Select * from Win32_NTLogEvent") 
05.
 
06.
For Each objEvent In colLoggedEvents 
07.
 
08.
    last_Message =  objEvent.Message & "von: " & objEvent.TimeWritten 
09.
    if last = 0 then 
10.
    wscript.echo last_Message 
11.
    last = last+1 
12.
    end if 
13.
Next
Von Eleganz ist diese Lösung zwar weit entfern, sie dürfte aber dennoch funktionieren.
IMHO wird die Event-Liste ohne unser Zutun richtig geordnet (letztes also zuerst...)

hm...
Bitte warten ..
Mitglied: bastla
02.06.2010 um 15:42 Uhr
@Edi
Warum der Zähler - es sollte doch ein einfaches "Exit For" genügen ...

Grüße
bastla
Bitte warten ..
Mitglied: Edi.Pfisterer
02.06.2010 um 15:51 Uhr
Hallo Bastla!
Warum der Zähler - es sollte doch ein einfaches "Exit For" genügen
Weil ich das noch nicht kannte
Man lernt nie aus...
lg
Bitte warten ..
Mitglied: djbazo
02.06.2010 um 15:52 Uhr
Hallo Edi.Pfisterer und alle anderen!!
vor lauter Aufregung hab ich die Begrüßung vergessen - sorry dafür.

Dein Script funktioniert - jedoch wird der älteste Beitrag angezeigt, die Eventliste wird somit falsch geordnert alt - neu
Hättest du / ihr vielleicht noch eine Idee?

Grüße
Bitte warten ..
Mitglied: Edi.Pfisterer
02.06.2010 um 16:08 Uhr
So, achtung Bastla, DAS wird jetzt schmutzig...

01.
Set objWMIService = GetObject("winmgmts:" & "\\" & "localhost" & "\root\cimv2") 
02.
 
03.
Set colLoggedEvents = objWMIService.ExecQuery _ 
04.
("Select * from Win32_NTLogEvent") 
05.
anzahl = colLoggedEvents.Count 
06.
 
07.
For Each objEvent In colLoggedEvents 
08.
 
09.
    last_Message =  objEvent.Message & "von: " & objEvent.TimeWritten  
10.
    if last = anzahl-1 then 
11.
    wscript.echo last_Message 
12.
 
13.
    end if 
14.
    last = last+1 
15.
Next
Bitte warten ..
Mitglied: bastla
02.06.2010 um 16:38 Uhr
Hallo Edi!

Etwas sauberer :
01.
Set objWMIService = GetObject("winmgmts:" & "\\" & "localhost" & "\root\cimv2") 
02.
 
03.
Set colLoggedEvents = objWMIService.ExecQuery _ 
04.
("Select * from Win32_NTLogEvent") 
05.
 
06.
For Each objEvent In colLoggedEvents 
07.
    last_Message =  objEvent.Message & "von: " & objEvent.TimeWritten  
08.
Next 
09.
 wscript.echo last_Message
Grüße
bastla
Bitte warten ..
Mitglied: Edi.Pfisterer
02.06.2010 um 18:55 Uhr

geil!!!!
selten so über mich selbst gelacht

Danke dafür!!!

lg
Bitte warten ..
Mitglied: bastla
02.06.2010 um 20:45 Uhr
Hallo Edi!
selten so über mich selbst gelacht

Danke dafür!!!
War zwar nicht die Zielsetzung, aber: gerne ...

Die "Scripting Guys" haben übrigens einen von der Grundidee her gar nicht unähnlichen Ansatz zu bieten ...

Grüße
bastla
Bitte warten ..
Mitglied: djbazo
03.06.2010 um 10:41 Uhr
Hallo zusammen,

vielen dank für die antworten.
das stimmt, jedoch zählen die "Scripting Guys" die gesamten Einträge, nicht nur von einem bestimmten SourceName.
Denn bei einem bestmmten SourceName bekomme ich immer einen

Fehler: Das Objekt unterstützt diese EIgenschaft oder Methode nicht.: 'objLogfile.NumberOfRecords
Code 800A01B6

Grüße
Bitte warten ..
Mitglied: bastla
03.06.2010 um 10:47 Uhr
Hallo djbazo!

Deshalb ja auch nur "nicht unähnlich" ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
03.06.2010 um 19:15 Uhr
Ja nee,

das möchte ich nicht so stehen lassen.
Hier wird halbgarer Code zitiert... auch wenn ich viel von den Redmonder "Scripting Guys" und noch mehr von den hier zu lesenden "Schroting guys" halte...

Also... in diesem Fall vergleichen diese begnadeten PraktikantInnen aus R. Äpfel mit Birnen bzw. apples with burns... oops... oranges.

In dem ziterten M$-Schnipsel, der in Ansätzen auch mir als Basis dient, wird ermittelt
a) Wie viele Sätze stehen im Log namens "Application"? [ aus objLogFile.NumberOfRecords --> ergibt eine Anzahl ]
b) in der zweiten Abfrage wird der "neueste" Satz ermittelt als "der mit der RecordNumber == Anzahl Sätze gesamt".

is' sich Quark. Jeder von uns hat schon Sätze aus den Logs archiviert und oder selektiv gelöscht.
Also kann es sein, dass in einem ordentlich aufgeräumten Security-Log z.B. gerade mal 20 Sätze stehen. Allerdings mit RecordNumber 555001 bis 555020.

Beispiel aus dem Leben... aus meinem realen ApplLog (ungetürkt)
01.
strComputer = "." 
02.
Set objWMIService = GetObject("winmgmts:" _ 
03.
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
04.
 
05.
Set objInstalledLogFiles = objWMIService.ExecQuery _ 
06.
    ("Select * from Win32_NTEventLogFile Where LogFileName = 'Application'") 
07.
' als erstes mal schauen wieviel Sätze da dümpeln im ApplLog... 
08.
' Hier sollte e i g e n t l i c h immer EIN 'Application'-Logfile herauskommen... *g 
09.
 
10.
For Each objLogfile in objInstalledLogFiles 
11.
    ' für das eine von einem Application-Logfile tue... 
12.
    intApplLogRecords = objLogFile.NumberOfRecords 
13.
    wscript.echo "Logfile " & chr(34) & objLogFile.LogFilename & chr(34) & _  
14.
     "  #  " & objLogFile.NumberOfRecords & _  
15.
           " Zuletzt geändert: " &  objLogFile.LastModified  
16.
     ' Achtung: lastModified wird NICHT gesetzt, sobald neue Events da sind. 
17.
     ' Sondern wenn die Datei "zur Ruhe kommt" ... beim Runterfahren!!! 
18.
     ' wer seinen Rechner Tag & Nacht anhat, der kann NICHT gegen dieses Datum prüfen 
19.
     ' sprich: Abfragen "Hole mir den Eintrag mit dem Lastmodified-Timestamp" 
20.
     ' In den einzelnen Events -siehe unten- ist auch jeweils ein "TimeWritten-Datum" . 
21.
     ' Aber das des neuesten Events ist NICHT unbedingt gleich diesem Modified-Datum 
22.
     ' [anmerk] Halt Shice programmiert. [/anmerk] 
23.
Next  
24.
 
25.
 
26.
' jetzt mal schauen, wie im ApplLog die einzelnen Events aussehen 
27.
' Strategie: ALLE Sätze holen... nur den ersten lesen  
28.
' Zeitlich-chronologische Reihenfolge ist (garantiert?)  "Neueste zuerst" 
29.
' jedenfalls auf allen Rechnern, mit denen ich getestet habe 
30.
 
31.
Set colLoggedEvents = objWMIService.ExecQuery _ 
32.
       ("Select * from Win32_NTLogEvent Where Logfile = 'Application'" ) 
33.
      ' hole alle Einträge des EventLogs "Application" (optimistisch: eines) 
34.
For Each objEvent In colLoggedEvents 
35.
    Wscript.echo "Neuester ApplLog-Record: "&  objEvent.RecordNumber & _  
36.
                   " Time Written    : " & objEvent.TimeWritten & _  
37.
                   " EventCode:  " & objEvent.EventCode & _  
38.
                   " Source: " & objEvent.SourceName 
39.
    ' wenn der erste Record auch der neueste ist, dann steht der älteste am Ende 
40.
    ' und dann kann ich den berechnen... aktuelle Satznr abzgl. AnzahlAlle plus 1 
41.
    oldestApplRec = objEvent.RecordNumber - intApplLogRecords + 1 
42.
    ' De-Comment bei Bedarf & Langeweile    WScript.Echo objEvent.getObjectText_ 
43.
    Exit for 
44.
Next 
45.
 
46.
 
47.
' Und eine gezielte Abfrage hinterher...nur den ältesten 
48.
Set colLoggedEvents = objWMIService.ExecQuery _ 
49.
("Select * from Win32_NTLogEvent " & _  
50.
 "Where Logfile = 'Application' and RecordNumber = " & oldestApplRec ) 
51.
For Each objEvent in colLoggedEvents 
52.
    ' für jeden einen Satz von einem einzigen Satz tue...*gg 
53.
    Wscript.echo "Ältester ApplLog-Record: "&  objEvent.RecordNumber & _  
54.
                   " Time Written    : " & objEvent.TimeWritten & _  
55.
                   " EventCode: " & objEvent.EventCode & _  
56.
                   " Source: " & objEvent.SourceName 
57.
    ' Bei Bedarf & Langeweile:    WScript.Echo objEvent.getObjectText_ 
58.
Next 
59.
 
60.
Wscript.quit ' so genannte Reissleinenprogrammierung 
61.
'-------------------------------hier is' sich Ende --- 
62.
 
63.
' bei Bedarf auch die gewünschten Details formatiert anzeigen. 
64.
' dann bitte bedienen aus der momentan unerreichbaren FOR-Next-Konstruktion unten 
65.
For Each objEvent in colLoggedEvents 
66.
    Wscript.Echo "Category: " & objEvent.Category 
67.
    Wscript.Echo "Computer Name: " & objEvent.ComputerName 
68.
    Wscript.Echo "Event Code: " & objEvent.EventCode 
69.
    Wscript.Echo "Message: " & objEvent.Message 
70.
    Wscript.Echo "Record Number: " & objEvent.RecordNumber 
71.
    Wscript.Echo "Source Name: " & objEvent.SourceName 
72.
    Wscript.Echo "Time Written: " & objEvent.TimeWritten 
73.
    Wscript.Echo "Event Type: " & objEvent.Type 
74.
    Wscript.Echo "User: " & objEvent.User 
75.
Next

Ausgabe dieses Machwerks ist
>e:\schnipsel\GetLastLogEvent.vbs 
Logfile "Application"  #  1345 Zuletzt geändert: 20100601220546.211425+120 
Neuester ApplLog-Record: 12919 Time Written    : 20100603164706.000000+120 EventCode:  257 Source: McLogEvent 
Ältester ApplLog-Record: 11575 Time Written    : 20100202203707.000000+060 EventCode: 1904 Source: HHCTRL
Anmerkungen (zusätzlich zu dem im Source stehenden)
a) bitte beachten in der Ausgabe die LastModified-Angabe des Logs und die Date-Werte darunter (TimeWritten) !

b) Schnipsel ist auch schnell runtergepfuscht... insbesondere die von Hand mit Leerzeichen ausgerichtete "Spalten untereinander"-Ausgabe.
Sollte natürlich für allgemeine Verwendung auf jeweils gleiche "Spalten"-Länge formatiert werden. War mir für die Demo nicht wichtig.

c) Überprüft ist es: der lt. Ausgabe älteste Satz ist auch der älteste, der neueste ist auch der neueste.

d) ABER: natürlich ist es bei mir insofern geschwindelt mit der Ermittlung der "ältesten" Satzes, dass unterstellt wird (von mir),
es sind vielleicht mal "alle Sätze älter als 2 Jahre" bzw. "älter als 2. Februar 2010" gelöscht worden.
Also eine ununterbrochene RecordNumber-Folge von Satz 1 bis Satz 11574 inclusive.
--> Achtung: Wenn jemand SELEKTIV einzelne Sätze mittendrin löscht, passt diese Milchmädchen-FDP-Rechnung natürlich nicht

e) bei diesem ganzen objWMI-Service-Gelumpe gilt:
Kein Satz muss zugesicherterweise ALLE denkbaren Attribute haben.
Ich habe genauso beim Testen auf die Schnauze bekommen wie Kollege djbazo in seinem letzten Post.
Es gibt Events ohne evtLog.Sourcename, ohne evtlog.messagetext, ohne....usw. ---> "On Error Resume Next".

f) für den jüngsten Satz braucht man/frau nichts davon...das ist einfach immer der erste.

Der Code basiert - wie geschrieben- auf den Hey Scripting-Guy-Skizzen

Grüße
Biber,
der sich jetzt auch wieder zu seinen unkomplizierteren Onelinern zurückzieht.
Bitte warten ..
Mitglied: djbazo
04.06.2010 um 08:07 Uhr
vielen dank für die ganzen Antworten!
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Batch & Shell
gelöst Appx aus Image auslesen und entfernen (9)

Frage von Markus2016 zum Thema Batch & Shell ...

JavaScript
gelöst Dropdownfeld auslesen und mit AJAX und JS an PHP senden (7)

Frage von ITFlori zum Thema JavaScript ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...