今更ながらWMI Code Creatorという存在を実はよく知りませんでした。
WMI Code Creatorを利用するとWMIを利用したスクリプトもしくはコードが物凄く簡単に作成出来ます。
既定ではVBScriptが利用出来ますが、メニューのCode Languageで選択する事で、C#やVB.NETのコードも利用出来ます。
しかもどうやらネームスペースに関しても現在のコンピュータで利用可能な物をリストアップしてくれるようですごく便利です。
うーん、もっと早く知っておけば良かったです。
例えば以下のようなイベントログ一覧を出力するスクリプトも、マウス操作だけで作成出来てしまいます。
これからスクリプトを勉強しようとしている方にも、かなりお勧めです。
strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") Set colItems = objWMIService.ExecQuery( _ "SELECT * FROM Win32_NTLogEvent",,48) For Each objItem in colItems Wscript.Echo "-----------------------------------" Wscript.Echo "Win32_NTLogEvent instance" Wscript.Echo "-----------------------------------" Wscript.Echo "Category: " & objItem.Category Wscript.Echo "CategoryString: " & objItem.CategoryString Wscript.Echo "ComputerName: " & objItem.ComputerName If isNull(objItem.Data) Then Wscript.Echo "Data: " Else Wscript.Echo "Data: " & Join(objItem.Data, ",") End If Wscript.Echo "EventCode: " & objItem.EventCode Wscript.Echo "EventIdentifier: " & objItem.EventIdentifier Wscript.Echo "EventType: " & objItem.EventType If isNull(objItem.InsertionStrings) Then Wscript.Echo "InsertionStrings: " Else Wscript.Echo "InsertionStrings: " & Join(objItem.InsertionStrings, ",") End If Wscript.Echo "Logfile: " & objItem.Logfile Wscript.Echo "Message: " & objItem.Message Wscript.Echo "RecordNumber: " & objItem.RecordNumber Wscript.Echo "SourceName: " & objItem.SourceName Wscript.Echo "TimeGenerated: " & objItem.TimeGenerated Wscript.Echo "TimeWritten: " & objItem.TimeWritten Wscript.Echo "Type: " & objItem.Type Wscript.Echo "User: " & objItem.User Next
ちなみにイベントログのうち、警告のみを表示するように設定する場合にはクエリ部分を以下のように書き換えます。
"SELECT * FROM Win32_NTLogEvent Where EventType = 2"
EventType = 1がエラー、EventType = 2が警告、EventType = 4が情報です。同じようにエラーと警告のみを表示させたい場合には、以下のように書き換えます。
"SELECT * FROM Win32_NTLogEvent Where EventType = 2 or EventType = 4"
さらにUTC時間を通常の時間表記に戻す場合には、以下のようなFunctionを利用すると便利です。
Function WMIDateStringToDate(dtmBootup) WMIDateStringToDate = CDate(Mid(dtmBootup, 5, 2) & "/" &_ Mid(dtmBootup, 7, 2) & "/" & Left(dtmBootup, 4) & _ " " & Mid (dtmBootup, 9, 2) & ":" & Mid(dtmBootup, 11, 2) &_ ":" & Mid(dtmBootup, 13, 2)) End Function
例えば以下のように利用します。
Wscript.Echo "TimeGenerated: " & WMIDateStringToDate(objItem.TimeGenerated) Wscript.Echo "TimeWritten: " & WMIDateStringToDate(objItem.TimeWritten)