運用業務やトラブル対応などでWindows イベントログをフィルター&エクスポートすることがあったのでその方法をメモしておく。evtx形式でエクスポートすることを想定する。
使用コマンド
コマンドプロンプトのwevtutilコマンドを利用する。
PowerShellにもGet-EventLogやGet-WinEventといったイベントログを参照・抽出するコマンドがあるが、これらのコマンドにはevtx形式でのエクスポート機能は実装されていないようだった。そのため、今回はwevtutilを使っての検証を行った。
wevtutilで実施したこと
実施したいことは以下の通り。
- イベントビューワー上の[Windows ログ]カテゴリ配下のログのうち、[Application]ログ、[セキュリティ]ログ、[システム]ログを個別に指定して参照。(フィルター条件1)
- 参照する際に日付条件でフィルターを行いたい。実施日の前日分に出力されたログのみ参照。(フィルター条件2)
- フィルター条件を適用し参照した結果を、evtx形式でエクスポート。
コマンド解説
wevtutil eplコマンド
結論:固有のログをevtx形式でエクスポートしたい場合は、wevtutil epl で実現できる。
パラメータの”epl”は”export-log”の略の模様。以下の形でコマンドを実行する。
wevtutil epl {epl | export-log} <Path><Exportfile>
rem サンプル
wevtutil epl System C:\Temp\system.evtx
参考URLは、https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/wevtutil#parameters
wevtutil epl への/q:<Query>オプション
ただし上記のコマンドだけでは、ログ日付でのフィルタを行えない。
日付でのフィルタを行うためには、/qオプションにてXPathクエリを記載する必要がある。
wevtutil epl {epl | export-log} <Path><Exportfile> /q:”*[sysytem[TimeCreated[@SystemTime>=’yyyy-mm-ddThh:mm:ss.sssZ’ and @SystemTime<=’yyyy-mm-ddThh:mm:ss.sssZ’]]]”
※注意:ここで指定する開始時刻・終了時刻のタイムゾーンは、OSで指定されたローカルなタイムゾーン(日本国内だとJST)ではなく、GMT(グリニッジ標準時)となっている。そのため、時間を指定する際はJSTから9時間分引いた時間を指定する必要がある。
rem サンプル:2023/11/18に出力されたsysytemログをエクスポート
wevtutil epl System C:\Temp\system231120.evtx /q:"*[sysytem[TimeCreated[@SystemTime>='2023-11-18T15:00:00.000Z' and @SystemTime<='2023-11-19T14:59:59.999Z']]]"
以下の通り、ログが出力される。
Applicationログを出力する場合は以下の通り。
rem サンプル:2023/11/18に出力されたsysytemログをエクスポート
wevtutil epl Application C:\Temp\system231120.evtx /q:"*[sysytem[TimeCreated[@SystemTime>='2023-11-18T15:00:00.000Z' and @SystemTime<='2023-11-19T14:59:59.999Z']]]"
Securityログを出力する場合は以下の通り。
rem サンプル:2023/11/18に出力されたsysytemログをエクスポート
wevtutil epl Security C:\Temp\system231120.evtx /q:"*[sysytem[TimeCreated[@SystemTime>='2023-11-18T15:00:00.000Z' and @SystemTime<='2023-11-19T14:59:59.999Z']]]"
Xpathクエリ生成の方法
/q:オプションで指定するXpathクエリだが、記載方法が複雑なため手入力では作業効率が悪くなる。そこでイベントビューワーのフィルタ機能を利用し、GUI上で、Xpathクエリを生成することが多いようだ。
今回の検証では、ログ日付の絞り込み(開始日、終了日指定)クエリをXpathで作成する場合、どのような流れになるかを確認した。流れは以下の通り。
イベントビューワーにて対象のログを選択し、右クリック、[現在のログをフィルター(L)]を選択。
[現在のログをフィルター]画面の[フィルター]タブ、[ログの日付]から[ユーザ設定の範囲]を指定。
[ユーザ指定の範囲]画面に、フィルター日付設定範囲の開始日と終了日を指定する。
フィルター条件を適用したら、[XML]タブを開け、<SELECT>タグの中身を確認する。これがXpathクエリとなるので、コピーしてコマンドの/q:オプションへ適用する。
コメント