2014-02-20 90 views
0

我有以下腳本來從系統中獲取事件日誌並寫入Excel。它在'Windows 7'上運行良好,但在'Windows Server 2003'上,編寫系統日誌花費7-8分鐘,並且在幾秒鐘內寫入應用程序日誌。但是系統日誌中的錯誤數量非常少。VB腳本幫助將事件日誌寫入excel

另一個問題是我在腳本中使用MyDate = DateAdd(「h」,-8,Now()),但它在12小時前獲取日誌。這次計算不能正常工作。

您的幫助將得到高度讚賞。

下面是腳本:

Option Explicit 

Dim objFSO, objFolder, objFile, objWMI, objItem, objItem1, objItem2 ' Objects 
Dim strComputer, strFileName, strFileOpen, strFolder, strPath, oExcel, oWB, oSheet, oSheet1, oSheet2 
Dim intEvent, intNumberID, intRecordNum, colLoggedEvents, colLoggedEvents2, colLoggedEvents3, MyDate, dtm, row,  row1, row2, Query, ServerTime 
MyDate = DateAdd("h", -8, Now()) 

'--------------------------------------------------------- 

On Error Resume Next 

Set oExcel=CreateObject("Excel.Application") 
oExcel.Visible=true 
Set oWB=oExcel.Workbooks.Open ("D:\EventLogs2.xls") 
Set oSheet=oWB.Worksheets.Add (, oWB.WorkSheets(oWB.WorkSheets.Count)) 
Set oSheet1=oWB.Worksheets.Add (, oWB.WorkSheets(oWB.WorkSheets.Count)) 
Set oSheet2=oWB.Worksheets.Add (, oWB.WorkSheets(oWB.WorkSheets.Count)) 
oSheet.Name="Application" 
oSheet1.Name="Security" 
oSheet2.Name="System" 

strComputer = "." 
ServerTime = Now    

intRecordNum = 0 
row = 0 
row1 = 0 
row2 = 0 

' ---------------------------------------------------------- 
' WMI Core Section 
Set objWMI = GetObject("winmgmts:" _ 
& "{impersonationLevel=impersonate,(Security)}!\\" _ 
& strComputer & "\root\cimv2") 

Set colLoggedEvents = objWMI.ExecQuery _ 
     ("SELECT * FROM Win32_NTLogEvent where Logfile = 'Application' and " _ 
     & "EventType = '1' and TimeWritten > '" & MyDate & "'") 
Set colLoggedEvents2 = objWMI.ExecQuery _ 
     ("SELECT * FROM Win32_NTLogEvent where Logfile = 'Security' and " _   
     & "EventType = '1' and TimeWritten > '" & MyDate & "'") 
Set colLoggedEvents3 = objWMI.ExecQuery _ 
     ("SELECT * FROM Win32_NTLogEvent where Logfile = 'System' and " _ 
     & "EventType = '1' and TimeWritten > '" & MyDate & "'") 

' ---------------------------------------------------------- 
' Next section loops through ID properties 

For Each objItem in colLoggedEvents          
If objItem.EventType=1 then               
row = row+1 
osheet.Cells(row,1).Value = ("Logfile: " & objItem.Logfile _ 
& " source " & objItem.SourceName) 
osheet.Cells(row,2).Value = ("Message: " & objItem.Message) 
osheet.Cells(row,3).Value = ("TimeGenerated: " & WMIDateStringToDate(objItem.TimeGenerated)) 
osheet.Cells(row,4).Value = ServerTime 

End If 
Next 


For Each objItem1 in colLoggedEvents2 
If objItem1.EventType=1 then 
row1 = row1+1 
osheet1.Cells(row1,1).Value = ("Logfile: " & objItem1.Logfile _ 
& " source " & objItem1.SourceName) 
osheet1.Cells(row1,2).Value = ("Message: " & objItem1.Message) 
osheet1.Cells(row1,3).Value = ("TimeGenerated: " & WMIDateStringToDate(objItem1.TimeGenerated)) 
osheet1.Cells(row1,4).Value = ServerTime 

End If 
Next                


For Each objItem2 in colLoggedEvents3   
If objItem2.EventType=1 then 
row2 = row2+1 
osheet2.Cells(row2,1).Value = ("Logfile: " & objItem2.Logfile _ 
& " source " & objItem2.SourceName) 
osheet2.Cells(row2,2).Value = ("Message: " & objItem2.Message) 
osheet2.Cells(row2,3).Value = ("TimeGenerated: " & WMIDateStringToDate(objItem2.TimeGenerated)) 
osheet2.Cells(row2,4).Value = ServerTime 

intRecordNum = intRecordNum +1 
End If 
Next 

Function WMIDateStringToDate(dtmDate) 
WMIDateStringToDate = CDate(Mid(dtmDate, 5, 2) & "/" & _ 
Mid(dtmDate, 7, 2) & "/" & Left(dtmDate, 4) _ 
& " " & Mid (dtmDate, 9, 2) & ":" & Mid(dtmDate, 11, 2) & ":" & Mid(dtmDate,13, 2)) 
End Function 

oWB.save 
oWB.Application.Quit 
WScript.Quit 
+0

7-8什麼?分鐘?小時?加侖?您是否確定腳本中的哪一步消耗了太多時間(例如,通過在每個步驟之前/之後記錄時間戳)? –

+0

對不起,忘了提,它是7-8分鐘。 –

+0

同樣,你是否確定腳本中的哪一步耗費了太多時間? –

回答

0

你就不能寫一個CSV文件?

事情是這樣的:

Option Explicit 

Dim objFSO, objFolder, objFile, objWMI, objItem, objItem1, objItem2 ' Objects 
Dim strComputer, strFileName, strFileOpen, strFolder, strPath, oExcel, oWB, oSheet, oSheet1, oSheet2 
Dim intEvent, intNumberID, intRecordNum, colLoggedEvents, colLoggedEvents2, colLoggedEvents3, MyDate, dtm, row,  row1, row2, Query, ServerTime 
MyDate = DateAdd("h", -8, Now()) 

'--------------------------------------------------------- 

On Error Resume Next 

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFile = objFSO.CreateTextFile("D:\EventLogs2.csv", True) 

strComputer = "." 
ServerTime = Now    

intRecordNum = 0 
row = 0 
row1 = 0 
row2 = 0 

' ---------------------------------------------------------- 
' WMI Core Section 
Set objWMI = GetObject("winmgmts:" _ 
& "{impersonationLevel=impersonate,(Security)}!\\" _ 
& strComputer & "\root\cimv2") 

Set colLoggedEvents = objWMI.ExecQuery _ 
     ("SELECT * FROM Win32_NTLogEvent where Logfile = 'Application' and " _ 
     & "EventType = '1' and TimeWritten > '" & MyDate & "'") 
Set colLoggedEvents2 = objWMI.ExecQuery _ 
     ("SELECT * FROM Win32_NTLogEvent where Logfile = 'Security' and " _   
     & "EventType = '1' and TimeWritten > '" & MyDate & "'") 
Set colLoggedEvents3 = objWMI.ExecQuery _ 
     ("SELECT * FROM Win32_NTLogEvent where Logfile = 'System' and " _ 
     & "EventType = '1' and TimeWritten > '" & MyDate & "'") 

' ---------------------------------------------------------- 
' Next section loops through ID properties 

For Each objItem in colLoggedEvents          
If objItem.EventType=1 then               
    objFile.WriteLine("Logfile: " & objItem.Logfile & "," & " source " & objItem.SourceName & "," & _ 
     "Message: " & objItem.Message & "," & _ 
     "TimeGenerated: " & WMIDateStringToDate(objItem.TimeGenerated) & "," & _ 
     ServerTime) 
End If 
Next 


For Each objItem1 in colLoggedEvents2 
If objItem1.EventType=1 then 
    objFile.WriteLine("Logfile: " & objItem1.Logfile & "," & " source " & objItem1.SourceName & "," & _ 
     "Message: " & objItem1.Message & "," & _ 
     "TimeGenerated: " & WMIDateStringToDate(objItem1.TimeGenerated) & "," & _ 
     ServerTime) 
End If 
Next                


For Each objItem2 in colLoggedEvents3   
If objItem2.EventType=1 then 
    objFile.WriteLine("Logfile: " & objItem2.Logfile & "," & " source " & objItem2.SourceName & "," & _ 
     "Message: " & objItem2.Message & "," & _ 
     "TimeGenerated: " & WMIDateStringToDate(objItem2.TimeGenerated) & "," & _ 
     ServerTime) 
End If 
Next 

Function WMIDateStringToDate(dtmDate) 
WMIDateStringToDate = CDate(Mid(dtmDate, 5, 2) & "/" & _ 
Mid(dtmDate, 7, 2) & "/" & Left(dtmDate, 4) _ 
& " " & Mid (dtmDate, 9, 2) & ":" & Mid(dtmDate, 11, 2) & ":" & Mid(dtmDate,13, 2)) 
End Function 

objFile.Close 
Set objFile = Nothing 
Set objFSO = Nothing 
+0

我會試試這個,讓你知道,非常感謝你的迴應。 –

+0

@IftakharAhmad好的。別客氣。 – Toothbrush

+0

您的腳本在第44,54和64行拋出錯誤。共振是'&'丟失。我添加了'&',但在此之後沒有任何反應,即使它不會引發任何錯誤。 –