20130903

VBScript讀取Windows系統事件日誌

大家都知道Windows的事件日誌可由事件檢視器中觀看
但若是要管理大量的伺服器、觀看它們的log時
除了額外安裝第三方syslog的軟體外
其實微軟有內建WMI Service
完全符合 DMTF Common Information Model (CIM) 與 WBEM 規格
可以程式透過WMI讀取Windows系統事件日誌
其實網路上盛名的"聖哥的資訊站"有更詳細和專業的教學
而我因工作需要稍微研究了一下
以下做個筆記,待之後實作後再進行補充
若有任何錯誤之處亦煩請各路朋友賜教 ^^


1.以WMI讀取事件日誌需要目標主機的管理員權限,或是網域的Domain Admin權限


2.設定的第一步是要先確認目標主機(被讀取事件的主機)的WMI服務有啟動
可下指令 net start winmgmt 或從服務中啟動(預設是自動啟動的)






3.目標主機開啟防火牆TCP 135、139、445 port (是否三個都要開尚待確認)
以及依照 http://support.microsoft.com/kb/875605#4 教學設定
允許遠端系統管理、授與 DCOM 遠端啟動權限、開啟 DCOM 連接埠、新增用戶 端應用程式至 Windows 防火牆例外清單

4.選擇一種支援WMI的腳本語言(VBScript, Microsoft JScript, Perl, ASP, .Net written in C#, Visual Basic .NET, or J#)

5.程式邏輯大致上分為三個步 驟
a.連接到WMI服務
b.檢視WMI管理的資源
c.顯示WMI管理資源的內容及屬性


6.若以VB為例,將目標電腦的log中大部份欄位資料列印出來 (此範例參考自這裡)

strComputer = "目 標電腦名稱or IP"

Set wbemServices = Getobject("winmgmts:\\" & strComputer)
Set wbemObjectSet = wbemServices.InstancesOf("Win32_NTLogEvent")

For Each wbemObject In wbemObjectSet
WScript.Echo "Log File: " & wbemObject.LogFile & vbCrLf & _
"Record Number: " & wbemObject.RecordNumber & vbCrLf & _
"Type: " & wbemObject.Type & vbCrLf & _
"Time Generated: " & wbemObject.TimeGenerated & vbCrLf & _
"Source: " & wbemObject.SourceName & vbCrLf & _
"Category: " & wbemObject.Category & vbCrLf & _
"Category String: " & wbemObject.CategoryString & vbCrLf & _
"Event: " & wbemObject.EventCode & vbCrLf & _
"User: " & wbemObject.User & vbCrLf & _
"Computer: " & wbemObject.ComputerName & vbCrLf & _
"Message: " & wbemObject.Message & vbCrLf
Next

沒有留言:

張貼留言