イベントログには Windows の運用管理に欠かせない各種情報が集まってきます。Windows Vista 以降イベントログの仕組みが大幅に拡張され、他のマシンのログを集約したり、サービスごとに分かれていたり、中身が XML ベースになったりと、高機能になっています。

プログラムやスクリプトからイベントログにアクセスする方法は、これまでも WMI (Windows Management Instrumentation) を使うなどありますが、これらの方法では、新しく拡張された部分にアクセスできません。

Windows Vista 以降では、wevtutil.exe というコマンドラインツールを使うと全てのイベントログにアクセスできます。

C:\>wevtutil /?
Windows イベント コマンド ライン ユーティリティ。

イベント ログおよび発行元に関する情報の取得、イベント マニフェストの
インストールおよびアンインストール、クエリの実行、ログのエクスポート、
アーカイブおよびクリアを実施できます。

使用法:

コマンドとオプション名は短いバージョン (ep /uni など) または
長いバージョン (enum-publishers /unicode など) を使用できます。
コマンド、オプションおよびその値は、大文字と小文字が区別されません。

変数はすべて大文字で記述しています。

wevtutil COMMAND [ARGUMENT [ARGUMENT] ...] [/OPTION:VALUE [/OPTION:VALUE] ...]

コマンド:

el | enum-logs          ログ名を列挙します。
gl | get-log            ログの構成情報を取得します。
sl | set-log            既存のログの構成を更新します。
ep | enum-publishers    イベントの発行元を列挙します。
gp | get-publisher      発行元の構成情報を取得します。
im | install-manifest   イベントの発行元とログをマニフェストから
                        インストールします。
um | uninstall-manifest イベントの発行元とログをマニフェストから
                        アンインストールします。
qe | query-events       ログまたはログ ファイルからイベントを照会します。
gli | get-log-info      ログ ステータス情報を取得します。
epl | export-log        ログをエクスポートします。
al | archive-log        エクスポートされたログを保管します。
cl | clear-log          ログをクリアします。

一般的なオプション:

/{r | remote}:VALUE
指定すると、リモート コンピューター上でコマンドが実行されます。
VALUE はリモート コンピューターです。
オプション /im および /um はリモート操作をサポートしていません。

/{u | username}:VALUE
リモート コンピューターにログオンする別のユーザーを指定します。VALUE は
"ドメイン\ユーザー" または "ユーザー" の形式のユーザー名です。
オプション /r が指定されている場合にだけ適用できます。

/{p | password}:VALUE
指定されたユーザーのパスワードです。指定されていないか、VALUE に
"*" が指定されている場合、ユーザーはパスワードの入力を求められます。
オプション /u が指定されている場合にだけ適用できます。

/{a | authentication}:[Default|Negotiate|Kerberos|NTLM]
リモート コンピューターにアクセスするための認証の種類です。
既定値は "Negotiate" です。

/{uni | unicode}:[true|false]
Unicode で出力を表示します。true の場合、出力は Unicode です。

特定のコマンドの詳細については、次のコマンドを入力してください。

wevtutil COMMAND /?

たとえば、システムログのうち警告レベルのものだけ取り出すには、次のようにします。

C:\>wevtutil qe system /rd:true /f:text /q:*[System[(Level=3)]]
Event[0]:
  Log Name: System
  Source: Microsoft-Windows-DNS-Client
  Date: 2010-02-12T15:51:03.314
  Event ID: 1014
  Task: N/A
  Level: 警告
  Opcode: 情報
  Keyword: N/A
  User: S-1-5-20
  User Name: NT AUTHORITY\NETWORK SERVICE
  Computer: xxx
  Description:
名前 xxx の名前解決は、構成されたどの DNS サーバーからも応答がなく、タイムアウトしました。
(以下略)

qe (query-events) のオプションを見てみましょう。

C:\>wevtutil qe /?
イベント ログ、ログ ファイル、または構造化クエリからイベントを読み取ります。

使用法:

wevtutil { qe | query-events } <PATH> [/OPTION:VALUE [/OPTION:VALUE] ...]

<PATH>
既定では、<PATH> パラメーターにログ名を指定します。ただし、/lf オプションを使用
する場合、<PATH> パラメーターにはログ ファイルへのパスを指定します。
/sq パラメーターを使用する場合、構造化クエリが格納されたファイルへの
パスを指定します。

オプション:

オプション名には、短いバージョン (/f など) または長いバージョン (/format など)
を使用できます。オプションとその値は大文字と小文字が区別されません。

/{lf | logfile}:[true|false]
true の場合、<PATH> はログ ファイルへの完全なパスです。

/{sq | structuredquery}:[true|false]
true の場合、PATH は構造化クエリが格納されたファイルへの完全なパスです。

/{q | query}:VALUE
VALUE は、読み取られたイベントをフィルターするための XPath クエリです。
このオプションを指定しないと、すべてのイベントが返されます。
このオプションは /sq が true の場合は使用できません。

/{bm | bookmark}:VALUE
VALUE は、前回のクエリからのブックマークが格納されたファイルへの完全なパスです。

/{sbm | savebookmark}:VALUE
VALUE は、このクエリのブックマークを保存するファイルへの完全なパスです。
ファイルの拡張子には .xml を指定してください。

/{rd | reversedirection}:[true|false]
イベントの読み取り方向。true を指定した場合、最新のイベントが最初に返されます。

/{f | format}:[XML|Text|RenderedXml]
既定値は XML です。Text を指定した場合、イベントは XML 形式ではなく
読みやすいテキスト形式で出力されます。RenderedXml を指定した場合、イベントは
レンダリング情報のある XML 形式で出力されます。Text 形式または RenderedXml
形式でイベントを出力した場合、XML 形式で出力する場合と比べて処理に時間が
かかります。

/{l | locale}:VALUE
VALUE は、イベント テキストを特定のロケールで出力するためのロケール文字列です。
/f オプションを使用してイベントをテキスト形式で出力する場合にのみ使用可能です。

/{c | count}:<n>
読み取る最大イベント数。

/{e | element}:VALUE
イベント XML を出力するときに、ルート要素を含めて整形式の XML を生成します。
VALUE はルート要素に含める文字列です。たとえば、/e:root と指定すると、結果は
ルート要素のペア <root></root> を含む XML で出力されます。

例:

次の例は、Application ログから最新のイベントを 3 つテキスト形式で
出力します。

wevtutil qe Application /c:3 /rd:true /f:text

出力形式などさまざまなオプションが指定できます。さてここで /q: で指定するクエリですが、これはイベントビューワーを使って作成すると簡単です。

Windows Vista 以降のイベントビューワーには、カスタムビューという、検索条件にマッチしたイベントログのみを表示できる仕組みがあります。たとえば既定で設定されている「管理イベント」というカスタムビューでは、すべての管理ログの重大、エラー、および警告のイベントが表示されます。

たとえばシステムのログのうち、警告レベルのみを表示させるカスタムビューを作成してみます。「カスタムビュー」を右クリックして、「カスタムビューの作成」を選びます。さまざまな検索条件が設定できます。

image

一旦作成したカスタムビューについては、ビューのプロパティから「フィルターの編集」を開くと、検索条件が確認できます。

ここで XML タブを選択すると、検索条件が XML 形式で表示されます。

image

赤で囲んだ部分がクエリ文字列になります。さらに検索条件を追加してみます。過去12時間の、DNS クライアントのみの警告ログに絞り込んでみます。

image

XML で見てみるとかなり複雑になっています。

image

このような場合は、クエリ全体 (<QueryList>~</QueryList>) をファイルに保存し、wevtutil.exe からはそのファイルを呼び出します。evq.xml に保存したとすると、

c:\>wevtutil qe evq.xml /sq:true /rd:true /f:text

とすれば、目的のログが取り出せます。

また、Windows PowerShell 2.0 でも、新しいイベントログに対応した Get-WindowsLog というコマンドレットがあります。同様にシステムの警告レベルのログを取り出すには

PS c:\> Get-WinEvent -LogName System -FilterXPath "*[System[(Level=3)]]"

 TimeCreated         ProviderName                         Id Message
-----------         ------------                         -- -------
2010/02/12 15:51:03 Microsoft-Window...                1014 名前 xxx
2010/02/12 15:50:25 Microsoft-Window...                1014 名前 yyy
2010/02/12 14:12:39 Microsoft-Window...                1014 名前 zzz
...

とします。XPath クエリを使わなくても、コマンドレットのオプションでかなりの部分が指定できますので、ヘルプを参照してください。