PowershellでイベントログのXMLを抜き出す方法

どうも、Miyaです。

企業で情報システムの運用をされている方であれば、イベントログってすごい重宝されていると思います。
例えば、タスクスケジューラを使って、特定のイベントが出力されたら、管理者にメールを送信するスクリプトを起動!や通報機能と連携させるぜ!とかとか、工夫次第では、運用の一部分を自動化できたりするので非常に便利です。

今回は、Powershellを使って、特定のイベントを取得して、とあるXMLの要素を抜粋する方法をご紹介します。

イベントログの取得

まずは、イベントログの取得ですが、今回はGet-WinEventを使います。
ちなみに本記事ではサンプルとして、ApplicationカテゴリのSecurity-SPPのイベントID:1066をターゲットとします。
このイベントをXML形式で取得してあげて、EventRecordIDを取得してあげましょう。
イベントログ

下記コマンドで、イベントID:1066の最新を取得します。

で、変数$getの型を調べてみると、System.Diagnostics.Eventing.Reader.EventRecordが確認できます。
こちらでライブラリを眺めていると、ToXMLメソッドがあるではありませんか。
てなわけで、$get変数をXML形式に成形してあげましょう。

$eventxmlのevent.systemプロパティを見てみると、
EventRecord クラス

おぉ、見えるではありませんか。
ここまでこれば、後は好きなプロパティを取得しましょう。

System.Diagnostics.Eventing.Reader.EventRecord
ぃよしっ♪
これが出来れば、運用でイベントをトリガーにスクリプト動かす際にXMLの値をスクリプトに含めてあげることができるんですね。
例えば、Office365とADFSで証明書認証を導入されているケースがあったとして、CAPI2ログとタスクスケジューラを使って、失効した証明書を使った認証を検知して、ユーザと管理者にメールを飛ばすだとか…(UPN=ProxyAddresses SMTPに限る)
また今度作ってみましょうか。

イベントログを上手く使いこなせばあらゆる検知、通報機能を搭載できるのは運用面で有り難い話です。
それでは、良いWindows Serverライフをっ♪

スポンサーリンク