Windows XP、Windows Server 2003にはEVENTQUERY.vbsというVBSファイルが既定でインストールされていて、これを利用するとイベントログに書き込まれたログが比較的簡単に摘出できます。
EVENTQUERY.vbs [/s Computer [/u Domain\User [/p Password]]][/fi FilterName][/fo {TABLE | LIST | CSV}][/r EventRange [/nh] [/v] [/l [APPLICATION] [SYSTEM] [SECURITY] ["DNS server"] [UserDefinedLog] [DirectoryLogName] [*] ] [/FO 形式] [/R 範囲] [/NH] [/L ログ名 | *] 説明: EVENTQUERY.vbs スクリプトにより、管理者は 1 つ以上のイベント ログ中のイベントとイベントのプロパティを一覧表示できます。 パラメータ一覧: /S サーバー 接続先のサーバーを指定します。 /U [ドメイン\]ユーザー コマンドが実行されるユーザー のコンテキストを指定します。 /P パスワード 指定のユーザー コンテキストの パスワードを指定します。 /V 詳細情報を表示します。出力時に詳細情報を 画面に表示するように指定します。 /l [APPLICATION] [SYSTEM] [SECURITY] ["DNS server"] [UserDefinedLog] [DirectoryLogName] [*] 監視するログを指定します。有効な値は、 Application、System、Security、"DNS server"、 ユーザー定義ログ、およびディレクトリ ログです。 "DNS server" は、/s パラメータで指定したコン ピュータで DNS サービスを実行している場合にのみ 使用できます。複数のログを監視するように指定する には、/l パラメータを繰り返し使います。 ワイルドカード (*) も使えます。これが既定です。 /FI フィルタ クエリによりフィルタして取り込むまたは 除外するイベントの種類を指定します。 /FO 形式 出力を表示する形式を指定します。 有効な形式は "TABLE"、"LIST" および "CSV" です。 /R 範囲 一覧表示するイベントの範囲を指定します。 有効な値: 'N' - 最近の N 個のイベントを一覧表示します。 '-N' - 最古の N 個のイベントを一覧表示します。 'N1-N2' - N1 から N2 のイベントを一覧表示します。 /NH "列ヘッダー" が出力に表示されないように指定 します。 "TABLE" および "CSV" の形式にのみ有効です。 /L ログ名 照会するログを指定します。 /? このヘルプ/使用法を表示します。 有効なフィルタ 使用できる演算子 有効な値 ------------- ------------------ ------------ DATETIME eq,ne,ge,le,gt,lt MM/dd/yy(yyyy),hh:mm:ssAM(/PM) TYPE eq,ne SUCCESS, ERROR, INFORMATION, WARNING, SUCCESSAUDIT, FAILUREAUDIT ID eq,ne,ge,le,gt,lt 負でない整数(0 - 65535) USER eq,ne 文字列 COMPUTER eq,ne 文字列 SOURCE eq,ne 文字列 CATEGORY eq,ne 文字列 注意: フィルタ "DATETIME" は "開始日- 終了日" のように指定可能です。 この形式では "eq" 演算子のみ利用可能です。 例: EVENTQUERY.vbs EVENTQUERY.vbs /L system EVENTQUERY.vbs /S system /U user /P password /V /L * EVENTQUERY.vbs /R 10 /L Application /NH EVENTQUERY.vbs /R -10 /FO LIST /L Security EVENTQUERY.vbs /R 5-10 /L "DNS Server" EVENTQUERY.vbs /FI "Type eq Error" /L Application EVENTQUERY.vbs /L Application /FI "Datetime eq 08/15/02,03:15:00AM-08/15/02,03:15:00PM" EVENTQUERY.vbs /FI "Datetime gt 07/04/02,04:27:00PM" /FI "Id gt 700" /FI "Type eq warning" /L System EVENTQUERY.vbs /FI "Type eq error OR Id gt 1000 "
例えばアプリケーションのイベントログからイベントID”1004″のソース”BINLSVC”が出したログを詳細付きでリスト表示する場合には以下をコマンドプロンプトに入力します。
Cscript "C:\WINDOWS\system32\eventquery.vbs" /l APPLICATION /FI "Id eq 1004 And Source eq BINLSVC" /FO List /V
演算子の部分は分かりにくいけど、それぞれ
eq = equal(指定された値と比較して等しいか判定)
ne = notEquals(指定された値と比較して等しくないか判定)
ge = greaterEqual(指定された値と等しいか、もしくは大きいかを判定)
le = lessEqual(指定された値と等しいか、もしくは小さいか判定)
gt = greaterThan(指定された値と比較して大きいか判定)
lt = lessThan(指定された値と比較して小さいか判定)
となっています。
なので例えばイベントIDが1004の場合とするのであれば
Id eq 1004
と記載しますし、逆にイベントIDが1004以外とするのであれば
Id ne 1004
とするわけです。
日付を指定して自動的にイベントログを保存したい場合には以下のようなスクリプトを作ると便利です。物凄くつくりの雑なものですが、参考程度に・・・。
Option Explicit Call Main '------------------------------------------------ ' Main '------------------------------------------------ Sub Main() Dim strPCNAME,strUSERNAME,strPASSWORD,strFILTER,strOUTPUT_TYPE '------------------------------------------------ 'PC名 strPCNAME = "" 'ユーザ名 strUSERNAME = "" 'パスワード strPASSWORD = "" 'フィルター(/FIの前に半角スペースが必要) strFILTER = " /FI ""Datetime eq " & strDate(now-8) & ",12:00:00AM-" & strDate(now-1) &_ ",12:00:00AM"" /FI ""Id eq 1004 And Source eq BINLSVC""" '出力形式(/FOの前に半角スペースが必要) 'strOUTPUT_TYPE = " /FO CSV" strOUTPUT_TYPE = " /FO LIST" '------------------------------------------------ 'QUERY_EVENTの呼び出し Call QUERY_EVENT(strFILTER,strPCNAME,strUSERNAME,strPASSWORD,strOUTPUT_TYPE) End Sub '------------------------------------------------ ' QUERY_EVENT '------------------------------------------------ 'eventquery.vbsの実行 Function QUERY_EVENT(strFILTER,strPCNAME,strUSERNAME,strPASSWORD,strOUTPUT_TYPE) Dim objWshShell,objExec 'eventquery.vbsに渡すコマンドライン Dim strCMDLine 'イベントログの値 Dim strEventLOG Set objWshShell = WScript.CreateObject("WScript.Shell") 'ID・パスワード等が空白ならコマンドに組み込まない If strPCNAME <> "" AND strUSERNAME <> "" AND strPASSWORD <> "" Then strPCNAME = "/S " & strPCNAME & " " strUSERNAME = "/U " & strUSERNAME & " " strPASSWORD = "/P " & strPASSWORD & " " End If '実行コマンド strCMDLine = "Cscript C:\WINDOWS\system32\eventquery.vbs /V /L APPLICATION "& strPCNAME & strUSERNAME & strPASSWORD & strFILTER & strOUTPUT_TYPE Wscript.Echo strCMDLine Set objExec = objWshShell.Exec(strCMDLine) strEventLOG = objExec.StdOut.ReadAll Wscript.Echo strEventLOG End Function '------------------------------------------------ ' strDate(日付整形) '------------------------------------------------ Function strDate(dtYMD) Dim objFS Dim WSHShell If Len(Datepart("m",dtYMD)) = 1 then strDate = "0" & Datepart("m",dtYMD) Else strDate = Datepart("m",dtYMD) End if If Len(Datepart("d",dtYMD)) = 1 then strDate = strDate & "/" & "0" & Datepart("d",dtYMD) Else strDate = strDate & "/" & Datepart("d",dtYMD) End if strDate =strDate & "/" & Datepart("YYYY",dtYMD) End Function
一応簡単に説明しておきますと、8日前から昨日までのアプリケーションのイベントログからイベントID”1004″のソース”BINLSVC”が出したログを詳細付きで表示します。以下の部分を変更すると範囲が変わります。
strDate(now-8)
また、Windows Server 2003以降のOSでのみ実行できる方法ですが、実行結果が流れてしまってイライラする場合には
Cscript hogehoge.vbs | clip
と実行する事により結果をクリップボードにコピーする事も出来ます。何気に覚えておくと便利ですよ。