イベントログを取得する(Get EventLog)(1)

サーバの運用管理でイベントログを参照することがあります。
例えば、サービスの開始/終了やログオン時刻の取得などです。
Monadでは簡単にイベントログを取得できるCmdletが用意されているため、
VBScriptに比べてイベントログ周りの処理は非常に簡単です。

イベントログの取得(get-eventlog)

イベントログの種類

イベントログにはアプリケーション、セキュリティなどの種類があります。
その種類を取得するには「get-eventlog」に「-list」オプションを指定します。

MSH C:\> get-eventlog -list

  Max(K) Retain OverflowAction        Entries Name
  ------ ------ --------------        ------- ----
     512      7 OverwriteOlder            181 アプリケーション
  15,360      0 OverwriteAsNeeded         928 MonadLog
     512      7 OverwriteOlder              0 セキュリティ
     512      7 OverwriteOlder            248 システム

一覧表示されるのは「System.Diagnostics.EventLog」オブジェクトです。

MSH C:\> $(get-eventlog -list)[0].getType().fullname
System.Diagnostics.EventLog

「get-eventlog」はEventLogオブジェクトのLogプロパティを指定してイベントログにアクセスします。
「-AsString」オプションを指定すると簡易にLogプロパティを取得可能です。

MSH C:\> get-eventlog -list -AsString
Application
MonadLog
Security
System
イベントログの取得

「get-eventlog」でイベントログにアクセスするには以下の構文を利用します。

get-eventlog [-LogName] System.String [-Newest System.Int32]

では、MonadLogのイベントログを取得してみましょう。

MSH C:\> get-eventlog MonadLog

Index Time        Type Source EventID Message
----- ----        ---- ------ ------- -------
  928 1 14 10:01  Info msh        400 Engine state is changed from None ...
  927 1 14 10:01  Info msh        600 Provider "Certificate" is Started.
  926 1 14 10:01  Info msh        600 Provider "Variable" is Started.
  925 1 14 10:01  Info msh        600 Provider "Registry" is Started.
  924 1 14 10:01  Info msh        600 Provider "Function" is Started.
(省略)

これでは、延々ログエントリを表示し続けてしまいます。
このような際は、最新の指定件数のみ表示する「-Newest」オプションが便利です。

MSH C:\> get-eventlog MonadLog -Newest 3

Index Time          Type Source                EventID Message
----- ----          ---- ------                ------- -------
  928 1 14 10:01  Info msh        400 Engine state is changed from None ...
  927 1 14 10:01  Info msh        600 Provider "Certificate" is Started.
  926 1 14 10:01  Info msh        600 Provider "Variable" is Started.