2017-09-12 2 views
1

Anscheinend enthält WQL keine ORDER BY Klausel. Gibt es eine Möglichkeit, die Ergebnismenge basierend auf einer der Spalten zu sortieren? Zum Beispiel:VBScript WQL Sort Result Set?

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") 
sSQL = "Select Time,Source,Event,CategoryNum,Category,TypeNum,Type,User,ComputerName,Insertion1,Insertion2,Data from Win32_NTLogEvent Where Logfile = 'System' and SourceName = 'Service Control Manager'" 
Set resultSet = objWMIService.ExecQuery (sSQL) 
For Each objEvent In resultSet 
    ... 
Next 

Gibt es eine Möglichkeit resultSet durch die Time Spalte zu sortieren?

Antwort

3

WQL hat in der Tat keine Sortierklausel, so dass eine Sortierung direkt in der Abfrage nicht möglich ist. Was Sie tun können, ist die zurückgegebenen Daten in einem disconnected recordset setzen und dann den Re-Cord sortieren:

Set DataList = CreateObject("ADOR.Recordset") 
DataList.Fields.Append "Time", 7 
DataList.Fields.Append "Source", 200, 255 
DataList.Fields.Append "Event", 3 
... 
DataList.Open 

Set wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!//./root/cimv2") 
qry = "SELECT Time,Source,Event,CategoryNum,Category,TypeNum,Type,User,ComputerName,Insertion1,Insertion2,Data " & _ 
     "FROM Win32_NTLogEvent " & _ 
     "WHERE Logfile='System' AND SourceName='Service Control Manager'" 

For Each evt In wmi.ExecQuery(qry) 
    DataList.AddNew 
    DataList("Time") = evt.Time 
    DataList("Source") = evt.Source 
    DataList("Event") = evt.Event 
    ... 
    DataList.Update 
Next 

DataList.Sort = "Time" 
DataList.MoveFirst 
Do Until DataList.EOF 
    WScript.Echo DataList.Fields.Item("Time") & vbTab & _ 
     DataList.Fields.Item("Event") 
    DataList.MoveNext 
Loop 

die data type der Felder nach Bedarf anpassen.

+0

Danke für den Vorschlag. Beim Bearbeiten und Ausführen des Beispiels erhalte ich sofort einen Fehler in Zeile 2: _Argumente sind vom falschen Typ, liegen außerhalb des akzeptablen Bereichs oder stehen in Konflikt zueinander. Code: 800A0BB9 Quelle: ADODB.Fields –

+0

Kann nicht reproduziert werden. Bitte geben Sie Beweise. –

+0

I reduziert es auf diese beiden Linien und in test1.vbs setzen: 'Set Datalist = Create ("ADOR.Recordset")
DataList.Fields.Append "Time", adDate' Dann lief test1.vbs von Command Line . Habe die Popup-Nachricht erhalten, auf die ich verwiesen habe. Ich benutze Windows 7 Pro x64. –

Verwandte Themen