前提や背景など
Windowsサーバの保守をやっていると、時々お世話になる wevtutil
というコマンドがあります。このコマンドは、Windowsのイベントログをごにょごにょする機能があるのですが、自分の場合はほとんどイベントログをエクスポートするのに使います。
典型的な使い方は以下のようになります。
wevtutil epl system "c:\temp\$($env:computername)_system.extx"
ただ、上記のようにエクスポートすると全部のログをエクスポートしてしまうので、ファイルサイズが大きくなりすぎて後々の取り扱いが面倒になったりします。そこで、実作業としては「期間」や「イベントソース」で絞り込みをすることが多いです。
wevtutil
コマンドには絞り込みを行うオプションとして、/q
があるのですが、絞り込み条件を xpath
で指定する必要があり、その場で組み立てるのはハードルが高いです。
例えば「過去7日間」でフィルタする例は以下のようになります。
wevtutil epl system "c:\temp\$($env:computername)_system.evtx" /q:"*[System[TimeCreated[timediff(@SystemTime) <= 604800000]]]"
普段から xpath
に慣れ親しんでいて、Windowsのイベントログにも精通していれば自由自在なのかもしれませんが、中々そんなことができる人は居ないと思います。
一方で、「期間を指定してエクスポートしたいならイベントビューアのフィルターを使えば良い」という考え方もあります。サーバ1台だけならこの方法でも良いのですが、複数台になると途端に手間が増えて時間がかかるため、コマンド一撃で済ませたい場面は多いです。
最初の1台だけイベントビューアを使って残りはコマンド
前置きが長くなりましたが、現実的には「最初の1台だけイベントビューアを使って残りはコマンド」というやり方をします。
イベントビューアのフィルターの設定画面には、「XML」というタブがあります。この「XML」タブには、フィルター画面で設定した通りの条件で xpath
が生成されます。
この、<Select ...></Select>
に囲まれた部分が xpath
となっているので、これをコピーしてコマンドを作れば2台目以降はコマンド一撃で作業を終わらせることができます。
尚、イベントビューアの「XML」タブに表示されている不等号(>
や <
)は、XML のルールに基づいて >
と <
に変換されているため、コマンドとして実行するときは、元の形に戻しててる必要があります。
wevtutil epl system "c:\temp\$($env:computername)_system.evtx" /q:"*[System[(EventID=1201) and TimeCreated[timediff(@SystemTime) <= 604800000]]]"
おわりに
同僚が困っていたので書きました。前提があるのは一般化のためです。稚拙なのは許してください。