コマンドについて詳しく解説します
最新のOSではこのままの手順では利用できない可能性がありますが、過去の情報の備忘録として、記事を残しておきます。
サーバの管理者だったらよく見るであろうWindowsのイベントビューア、イベントログについてコマンドプロンプトおよびバッチからログを出力する方法について調べてみました。
ソース
@echo off wevtutil qe system /f:text /q:*[System[(EventID=%1)]]
処理の内容
ソースは一行だけなのでバッチと呼んでいいかどうかも怪しい作りですが、中でやっている処理については下記の通り。
「システム」のイベントログから、指定したイベントIDを出力する
wevtutil qe system /f:text /q:*[System[(EventID=%1)]]
Windows Vistaや7以降、Windows Server 2008以降でコマンドプロンプトからイベントログにアクセスするには wevtutil.exe を使います。
このコマンドから、イベントログにできる操作がすべて可能なのだとか。 コマンドのリファレンスについては、下記が詳しいのでこちらを参照。
Windows 7, Vista, Server 2008, R2 の新しいイベントログにスクリプトからアクセスする方法 - Shigeya Tanabe's blog - Site Home - TechNet Blogs
今回の記述の中の %1 はバッチの引数で、この引数に数値を指定してバッチを実行すればそのイベントIDのログを取得するという仕組みです。
イベントログを出力するコマンドのオプションについて
wevtutil qe system /f:text /q:*[フィルター設定]
wevutil qe で、イベントログを照会、出力するコマンドになります。
system はイベントログの種類(アプリケーションとか、システムとか)の指定ですね。 アプリケーションの場合は wevtutil qe application でいけます。
/q]*[] のオプションは、イベントログのフィルター設定の内容を指定するオプションです。
ここのフィルター指定の部分は入力項目が多岐にわたりすぎるのでここでは説明は控えときますが、一例を挙げると /q:*[System[(EventID=1)]] という指定にするとイベントIDが1のログのみを表示(フィルター)するということになります。
/f:text の部分は、出力するフォーマットについて。 このオプションの場合、出力結果をわかりやすいようにテキストの形式で出力します。 未設定だと、XMLファイルのまま出力されるので解読が大変。 逆にいえばXML形式で取り込んで他のアプリケーションなどで活用するのであれば、XMLのままの方がいいのでしょう。
出力される内容
とりあえず、今回の例ではサーバが起動された際に出力される「EventLog」のイベントID6009のログを引数から指定して出力してみました。 存在するログの分だけ一気に出力されるので、これはほんの一部です。
c:\>EventLogGet.bat 6009 Event[0]: Log Name: System Source: EventLog Date: 2014-10-29T09:31:51.000 Event ID: 6009 Task: N/A Level: 情報 Opcode: N/A Keyword: クラシック User: N/A User Name: N/A Computer: PCNAME Description: Microsoft (R) Windows (R) 6.01. 7601 Service Pack 1 Multiprocessor Free. ...
このような形でテキスト形式で一覧表示されるようになります。 引数部分は当然、別の値からの変数でも問題なしです。
まとめ
- コマンドプロンプトから wevtutil.exe を使う
- イベントログの出力をバッチから行うことも可能
- イベントID部分は変数や引数で指定できる
- 出力形式はXMLやテキストの形式で可能
アイデア次第ではもうちょっと有効活用できそうな気がするので、もうちょっと調べてみます。 もうちょっと手を加えればイベントログからcsv形式にも出力可能なようなので、この辺も紹介できればいいですね。