wmicコマンドでイベント・ログを表示するTech TIPS

WMIとwmicコマンドを利用すると、システムに関するさまざまな情報を取得したり、操作したりできる。wmicでイベント・ログを表示させるには、wmic nteventコマンドを利用する。検索条件はwhere、出力フォーマットはlist /formatオプションでそれぞれ指定する。

» 2008年04月25日 05時00分 公開
[打越浩幸デジタルアドバンテージ]
Tech TIPS
Windows Server Insider


「Tech TIPS」のインデックス

連載目次

対象OS:Windows 2000/Windows XP/Windows Server 2003/Windows Vista/Windows Server 2008



解説

 イベント・ログは一般的にはイベント・ビューアで閲覧することが多いが、TIPS「コマンド・プロンプトでイベント・ログを表示する」で紹介したeventquery.vbsコマンドを使えば、コマンド・プロンプト上から取得、操作できるので、バッチ・コマンドなどから利用する場合はこの方が便利である。TIPS「WMIとwmicコマンドを使ってシステムを管理する(基本編)」では、WMIの基本的な使い方を紹介しているが、WMI+wmicを使っても、同様のことを行える(実際にはeventquery.vbsはWMIを使って実装されている)。wmicを使ってWMIを直接利用すれば、より複雑で柔軟な検索条件を指定したり、多様な出力形式を得ることができる。本TIPSでは、wmicを使ったイベント・ログのクエリ方法について解説する。

操作方法

●wmicでイベント・ログを取得する

 (WMIと)wmicコマンドでイベント・ログを取得するには、「wmic ntevent」というコマンドを実行する。wmicはWMIを呼び出すためのコマンドライン・インターフェイスで、nteventはイベント・ログ・オブジェクトのエイリアスを示す名前である。だがこのコマンドをそのまま実行すると、イベント・ログに含まれるすべてのイベントを取得しようとするので、非常に時間がかかるし、大量の出力が得られるので、ほとんど役に立たない。そのため、通常は何らかの条件を付けて検索することになるだろう。

 取得するイベントを限定するには、「wmic ntevent where 〜」に続けて、条件を指定する。where条件句では、(キーワードがwhereとなっていることからも分かるように)SQLのクエリ文のような構文が使える。条件式中でどのようなフィールド名が利用できるかは「wmic ntevent list /?」を実行すれば確認できる。

C:\>wmic ntevent list /? ……ヘルプの表示

プロパティ一覧の操作です。
使用法:

LIST [<list format>] [<list switches>]

次の LIST 形式が利用可能です:

BRIEF         - Category, Category String, Event Code, Event Identifier, Type Event, Insertion Strings, Log File, Message, Record Number, Source Name, Time Generated, Time Written, Type, User Name
FULL                      -
……(以下省略)……



 この「BRIEF」の部分に、イベント・ログで表示されるフィールドの一覧が表示されているので、これらを使って取得する条件を記述すればよい(実際に出力させてフィールド名を調べてもよい)。

フィールド名 内容
ComputerName コンピュータ名
LogFile ログ・ファイルの種類。「Application」「Security」「System」「DNS Server」「Windows PowerShell」……
Message ログ・メッセージ
SourceName ソース名
TimeGenerated イベントの生成時刻。「YYYYMMDD」か「YYYYMMDDHHMMSS.0+540」(前者はGMT、後者はJST)
Type イベントの種類
UserName ユーザー名
where句で利用できる主要なフィールド名
これらの条件を組み合わせてwhere句を組み立てるとよい(大文字/小文字の違いは無視される)。

●イベント・ログの取得例

 以下にいくつかの例を示しておく

■本日以降のログを取得する例
 今日の日付が「2008年4月25日」だとすると、次のような文で本日のシステム・ログが取得できる(取得するログの種類を限定しないと、すべてのログが検索対象となる)。なお、wmicをインタラクティブ・モードで使用する場合は、先頭の「wmic」は省いて入力すること。

wmic ntevent where "(logfile='system' and timegenerated >= '20080425')"



 ここでは日付を「'20080425'」としているが、これだとGMTで計算されるようである。日本の標準時間(JST)はGMTとは9時間の時差があるので、この指定だと深夜0:00〜午前9:00までの分が除外されてしまう。正確に深夜0:00からも含めるなら「'20080425000000.0+540'」とするのがよい(しかもなぜか、この形式の方がクエリが速い。可能な限りこの形式を使うのがよいだろう)。

■エラー・ログのみを取得する例
 エラー・ログを抽出するには、typeがerrorのイベントを検索する。

wmic ntevent where "(logfile='system' and timegenerated >= '20080420000000.0+540' and type='error')"



 より複雑な条件を指定したければ、さらにandなどで条件を追加すればよい。

●出力形式の指定

 wmic nteventコマンドでは、出力形式をいくつか選ぶことができる。利用可能な出力形式の一覧は「wmic ntevent list /format /?」で確認できる。

C:\>wmic ntevent list /format /?

XML 結果を処理するキーワードと XSL ファイル名です。
使用法:

/FORMAT:<format specifier>
注意: <formatspecifier> : ((<transformname>|<transformname> : <paramstring>)[,<formatspecifier>]).
where <paramstring>:((<parametername>=<value>)[,<paramstring>]).

注意: <transformname> は <key word> または <xsl file name> です。

Keywords:

CSV ……以下、フォーマットの一覧
HFORM
HMOF
HTABLE
HXML
LIST
RAWXML
TABLE
VALUE
htable-sortby
htable-sortby.xsl
texttablewsys
texttablewsys.xsl
wmiclimofformat
wmiclimofformat.xsl
……(以下省略)……



 これらの形式を指定して出力させ、結果をファイルにリダイレクトすれば、フォーマット済みのファイルが得られる。例えば、HTMLの表形式で出力させるには次のようにする。

wmic ntevent where "(logfile='system' and timegenerated >= '20080420' and type='Error')" list /format:HTABLE > errorlog.html



 実際に出力されたデータは、次のようになる。

出力したログの例 出力したログの例
システム・ログからエラーのエントリだけを集めて、HTABLE形式で出力させた場合の例。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。