2017-09-12 4 views
1

분명히 WQL에 ORDER BY 절이 없습니다. 열 중 하나를 기반으로 결과 집합을 정렬하는 방법이 있습니까? 예를 들어 :VBScript WQL 정렬 결과 집합?

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 

Time 열을 기준으로 resultSet을 정렬 할 수있는 방법이 있습니까?

답변

3

WQL 실제로 순서 지정 절이 없으므로 쿼리에서 직접 정렬 할 수 없습니다. 당신이 할 수는 disconnected recordset에서 반환 된 데이터를 입력 한 다음 레코드 분류되어 필요에 따라

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 

이 필드의 data type를 조정합니다.

+0

제안 해 주셔서 감사합니다. 샘플을 편집하고 실행할 때 2 행에서 즉시 오류가 발생합니다. _Arguments의 형식이 잘못되었거나 허용 범위를 벗어 났거나 서로 충돌했습니다 _. 코드 : 800A0BB9 원본 : ADODB.Fields –

+0

재현 할 수 없습니다. 증거를 제공해주십시오. –

+0

나는이 두 줄에 감소 test1.vbs에 넣어 : '을 설정하여 DataList ("ADOR.Recordset")
DataList.Fields.Append "시간"= CreateObject를, adDate' 그런 다음 실행 test1.vbs를 명령 줄에서 . 제가 언급 한 팝업 메시지가 나타납니다. Windows 7 Pro x64를 사용하고 있습니다. –