i移転先予定のブログURLはこちら(作成中):http://www.sawanoboly.net/wp/
旧ブログはこちらでも保管しときます:http://www.sawanoboly.net/wp_old/
The PowerShell Guy が教えてくれた、WindowsServerでイベントログをリアルタイムで監視する方法。
.Net FrameWork を使えるPowerShellなら、色々楽勝...といっても結局はWMIに問い合わせるみたい、某所で使っているイベントログ監視スクリプトはVBSで作ってあるけど、あれもWMIだったな。
ただ、system.management.ManagementEventWatcher クラスをいきなり使えるということでだいぶ違うように見える。
実はクラスとかあまり理解してないが、なんとも便利になったと思う。
イベントを待つには3行ですっきりOK、表示用にもう一行。
手っ取り早く効果を試せるので、下記をPSのプロンプトに張り付けてみる。
$ew = new-object system.management.ManagementEventWatcher $ew.query = "Select * From __InstanceCreationEvent Where TargetInstance ISA 'Win32_NTLogEvent'" $e = $ew.WaitForNextEvent() $e
ManagementEventWatcher パブリック メソッド の WaitForNextEvent() を使っている、張り付けたスクリプトはいったんここで止まる。
何かイベントが発生するまで待機するので、他のシェルからテスト用に eventcreate コマンドでイベントログを書き込み。
すると、 $e に発生したイベントのオブジェクトが代入され、 直後で指定しているので $e が表示される
はい出た。
が、えらくメタな情報だな。
今回目的のイベントログは TargetInstance ってプロパティに格納されているので表示する、この辺はWMI。
OK、イベントソース、コードなど、おなじみのものが表示されている。
それではイベントログをリアルタイムで監視させる。
特に芸も無く、ループで回すだけだ。
$a = 0
$ew = new-object system.management.ManagementEventWatcher
$ew.query = "Select * From __InstanceCreationEvent Where TargetInstance ISA 'Win32_NTLogEvent'"
do
{
$e = $ew.WaitForNextEvent()
$e.TargetInstance
}
while ($a -ne 1)
While にずっと達成できない条件を指定して、ずっと回ってもらう。
これをPSプロンプトに流すと、Whlieの後で、カーソル点滅。 最後はDoの>>が消えるまでEnterの入力が必要。
さて、この状況でほっといてみよう、EventCreateで試してもいい。
Vistaでやっていたら、意外と色々ログが上がって来て面白かった。
さて、これをやってどうするか。
イベントをキャッチして、mixi や wassr に投稿するBotも捨てがたいが、通常は警告(Warning)、エラー(Error)もしくは特定のイベント発生を管理者に通知したい。
手段として妥当なところでは、メールだろうか。
今度はメール通知部分をくっつけてみよう、起動はタスクマネージャからだな。
(2)
(0)
(0)
(0)
Total: 2
最近のコメント