wmicコマンドでイベント・ログを表示する:Tech TIPS
WMIとwmicコマンドを利用すると、システムに関するさまざまな情報を取得したり、操作したりできる。wmicでイベント・ログを表示させるには、wmic nteventコマンドを利用する。検索条件はwhere、出力フォーマットはlist /formatオプションでそれぞれ指定する。
対象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
実際に出力されたデータは、次のようになる。
■この記事と関連性の高い別の記事
- wmicコマンドでシステムの構成を設定/変更する(TIPS)
- WindowsでWMIとwmicコマンドを使ってシステムを管理する(基本編)(TIPS)
- PowerShellでWMIを利用するためのコードを生成する(TIPS)
- WMIを使うスクリプトを簡単に作成する(TIPS)
- コマンド・プロンプトでイベント・ログを表示する(TIPS)
Copyright© Digital Advantage Corp. All Rights Reserved.