[VBScript & WMI]Select statement voor events van 1 dag

Pagina: 1
Acties:

  • Equator
  • Registratie: April 2001
  • Laatst online: 26-05 12:46

Equator

Crew Council

🦺#Rodekruis #whisky #barista

Topicstarter
Ik ben bezig met een script wat NT Event Log's binnenhaalt aan de hand van enkele bepalingen.

Dit script is in VBScript, en ik query daarmee de WMI database van een Windows 2000 Server. (Ook NT4, maar das verder niet belangrijk)

Wat ik in weze doe is dit:
VBScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
For Each strServer In arrServers
    Set objWMIService = GetObject("winmgmts:\\" & strServer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select EventCode, LogFile, Message, SourceName, TimeGenerated, Type, User from Win32_NTLogEvent where Type = 'error' or Type = 'warning'",,48)
    For Each objItem in colItems
        if objItem.TimeGenerated > strDate then
            Wscript.Echo "EventCode = " & objItem.EventCode 
            Wscript.Echo "Logfile = " & objItem.Logfile
            Wscript.Echo "Message = " & objItem.Message
            Wscript.Echo "SourceName = " & objItem.SourceName
            Wscript.Echo "TimeGenerated = " & WMIDateStringToDate(objItem.TimeGenerated)
            Wscript.Echo "Type = " & objItem.Type
            Wscript.Echo "User = " & objItem.User
        Else
            WScript.Echo "Nope"
        End If
    Next
Next


Hierin is strDate een string die de datum noteerd als 20040218120502 -1 dag
Omdat objItem.TimeGenerated ook in die vorm wordt gegeven.
Ik maak dus in regel (5) een selectie op de events die alleen in de afgelopen 24 uur zijn gebeurd.

Echter, wordt wel de gehele database doorlopen. En bij een server waar ook wordt geprint worden er nogal wat events gelogged. (Bovendien staat de eventlogfile size op 4096kb, want dat is hier policy)

Liever wil ik dus het select statement al aanpassen.
Nu heb ik dit geprobeerd met de regel:
code:
1
Set colItems = objWMIService.ExecQuery("Select EventCode, LogFile, Message, SourceName, TimeGenerated, Type, User from Win32_NTLogEvent where Type = 'error' or Type = 'warning' and where TimeGenerated > " & "'" & strDate & "'" & "",,48)


Maar dat genereerd dan de foutmelding:
code:
1
(111, 2) (null): 0x80041017


Nu is programmeren een manier van denken IMO, maar misschien denk ik verkeerd.

Is er een manier om in het select statement al te kijken naar events die "nieuw" zijn ??
WMIDateStringToDate = overigens een simpele Function die het lange formaat omzet naar leesbaar
Die wscript.echo "nope" is overigens puur voor controle ;)

offtopic:
Sorry voor de layout.. Gebeurt hier denk ik wel vaker

[ Voor 21% gewijzigd door Equator op 18-02-2004 12:12 ]


Verwijderd

Je hebt 2 mogelijkheden:
- ofwel voeg volgende string toe aan de strDate: .000000+000
- ofwel gebruik je slechts de eerste 8 cijfers (jaar/maand/dag)

  • Equator
  • Registratie: April 2001
  • Laatst online: 26-05 12:46

Equator

Crew Council

🦺#Rodekruis #whisky #barista

Topicstarter
Ik heb beide opties geprobeerd.

strDate aangepast naar strDate & ".000000+000"
result = (null): 0x80041017

select statement veranderd naar de eerste 8 vanaf links

("Select EventCode, LogFile, Message, SourceName, TimeGenerated, Type, User from Win32_NTLogEvent where Type = 'error' or Type = 'warning' and where " & Left ("TimeGenerated",8) & " > " & "'" & strDate & "'" & "",,48)

Geeft ook dezelfde error terug.
Blijkbaar is het result dan null (of lees ik die error verkeerd)

Verwijderd

Ik was nog iets vergeten:

Je moet
and where TimeGenerated
vervangen door
and TimeGenerated