WMI Code Creatorを使ってスクリプトを作成する

0014

今更ながらWMI Code Creatorという存在を実はよく知りませんでした。
WMI Code Creatorを利用するとWMIを利用したスクリプトもしくはコードが物凄く簡単に作成出来ます。

既定ではVBScriptが利用出来ますが、メニューのCode Languageで選択する事で、C#やVB.NETのコードも利用出来ます。

しかもどうやらネームスペースに関しても現在のコンピュータで利用可能な物をリストアップしてくれるようですごく便利です。
うーん、もっと早く知っておけば良かったです。

WMI Code Creator

例えば以下のようなイベントログ一覧を出力するスクリプトも、マウス操作だけで作成出来てしまいます。
これからスクリプトを勉強しようとしている方にも、かなりお勧めです。

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)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です