Windows TIPS
[PowerShell]
  Windows TIPS TOPへ
Windows TIPS全リストへ
内容別分類一覧へ

PowerShellでイベント・ログの内容を参照する

解説をスキップして操作方法を読む

山田 祥寛
2008/06/13
対象ソフトウェア
Windows PowerShell
イベント・ログは、ハードウェアやソフトウェア、そのほか、システム全般の問題について情報を収集するための重要な手掛かりとなる。
PowerShellでは、イベント・ログにアクセスするためのGet-EventLogコマンドレットが用意されており、コマンド実行だけで簡単にログ情報を取得できる。

解説

 イベント・ログは、オペレーション・システム上で発生した処理全般(エラーや警告、一般的な情報など)が記録された情報である。システム上でなにかしら問題が発生した場合にも、原因特定の情報を収集するためにイベント・ログの存在は欠かせない。

 TIPS「PowerShellスクリプトで発生したエラー情報をイベント・ログに記録する」では、このイベント・ログに対してPowerShellスクリプトからログ情報を記録する方法について紹介した。PowerShellでは、.NET Frameworkのクラス・ライブラリを利用することで、イベント・ログへの記録がごく簡単なコードで記述できるが、イベント・ログを参照するのはもっと簡単だ。PowerShellでは、専用のGet-EventLogコマンドレットが用意されているので、これを利用するだけでよい。以下では、Get-EventLogコマンドレットの具体的な使い方を例を交えながら紹介していく。

操作方法

 まずは、システム上に記録されたイベント・ログをリスト表示してみよう。といっても、Get-EventLogコマンドレットを実行するだけである。

PS > Get-EventLog -list

  Max(K) Retain OverflowAction        Entries Name
  ------ ------ --------------        ------- ----
  16,384      0 OverwriteAsNeeded      43,265 アプリケーション
     512      7 OverwriteOlder              0 Internet Explorer
  16,384      0 OverwriteAsNeeded          44 Microsoft Office Diagnostics
  16,384      0 OverwriteAsNeeded       1,214 Microsoft Office Sessions
  16,384      0 OverwriteAsNeeded      11,160 セキュリティ
  16,384      0 OverwriteAsNeeded      76,277 システム
  16,384      0 OverwriteAsNeeded           0 Virtual Server
  15,360      0 OverwriteAsNeeded       1,249 Windows PowerShell

 これは単にログをリスト表示しているだけだが、それぞれのログに含まれる個別のエントリを確認するには、以下のように記述すればよい。systemはシステム・ログを表している(指定可能なイベント・ログ名の一覧を取得するには、「Get-EventLog -list -AsString」とすれば表示される)。

PS > Get-EventLog system

Index Time        Type Source      EventID Message
----- ----        ---- ------      ------- -------
...34 5 17 22:04  Info Tcpip       4201    ネットワーク アダプタ \DEVICE\...
...33 5 17 22:04  Info Service...  7036    Windows Image Acquisition (WIA)...
...32 5 17 22:04  Info Tcpip       4201    ネットワーク アダプタ \DEVICE\...
...31 5 17 22:04  Warn Dhcp        1003    ネットワーク アドレスが ...
...30 5 17 22:04  Info Service...  7036    McAfee Real-time Scanner サービス...
...29 5 17 17:42  Info Service..   7036    McAfee Real-time Scanner サービス...
...28 5 17 16:48  Warn Tcpip       4226    TCP/IP で、同時 TCP 接続試行回数...
……(以下省略)……

 詳細なメッセージを確認したければ、Format-Listコマンドレットを併用して、次のように記述するとよいだろう。

PS > Get-EventLog system | Format-List

Index              : 151634
EntryType          : Information
EventID            : 4201
Message            : ネットワーク アダプタ \DEVICE\TCPIP_{D9E385AA-……
Category           : (0)
CategoryNumber     : 0
ReplacementStrings : {, \DEVICE\TCPIP_{……
Source             : Tcpip
TimeGenerated      : 2008/05/17 22:04:38
TimeWritten        : 2008/05/17 22:04:38
UserName           :

Index              : 151633
EntryType          : Information
EventID            : 7036
……(以下省略)……

 また、エラー・ログだけを取得したい場合には、Where-Objectコマンドレットを使ってエントリを絞り込むことも可能だ。

PS > Get-EventLog application | Where-Object { $_.EntryType -eq "Error" }

Index Time          Type Source                EventID Message
----- ----          ---- ------                ------- -------
43260 5 17 23:39    Erro Userenv                  1085 グループ ポリシーのク...
43243 5 17 23:35    Erro Userenv                  1085 グループ ポリシーのク...
43237 5 17 23:32    Erro Application Error        1001 エラー発生バケット 44...
43236 5 17 23:32    Erro Application Error        1000 エラー発生アプリケー...
……(以下省略)……

 変数「$_」はPowerShellにおける予約変数の1つで、パイプライン経由で渡されたオブジェクトを表す。つまり、ここではパイプライン経由で渡されたエントリから種別(EntryTypeプロパティ)がエラー(Error)であるもののみを抽出/出力している。利用可能なイベントの種類(EntryTypeプロパティの値)については、TIPS「PowerShellスクリプトで発生したエラー情報をイベント・ログに記録する」を参照していただきたい。

 出力されるエントリの件数が多い場合には、-newestオプションで最新の何件かだけを出力することもできる。以下はセキュリティ・イベントログから最新の7件のみを取得する例である。

PS > Get-EventLog security -newest 7

Index Time          Type Source                EventID Message
----- ----          ---- ------                ------- -------
11160 5 17 22:04    Fail Security                  680 ログオン試行者: MICRO...
11159 5 10 13:32    Succ Security                  612 監査ポリシーの変更:...
11158 5 10 13:32    Succ Security                  612 監査ポリシーの変更:...
11157 4 22 16:03    Succ Security                  612 監査ポリシーの変更:...
11156 4 22 16:03    Succ Security                  612 監査ポリシーの変更:...
11155 4 20 17:28    Fail Security                  615 IPSec サービス:     I...
11154 4 20 17:27    Fail Security                  615 IPSec サービス:     I...

 最後に、Group-Object/Sort-Objectコマンドレットを利用して、特定のイベント・ソース単位にグループ化し、エントリの数が多い順にソートして出力してみよう。

PS > Get-EventLog system | Group-Object Source | Sort-Object Count -Descending

Count Name                      Group
----- ----                      -----
26801 Service Control Manager   {DIMENSION5100C, DIMENSION5100C, ...}
17983 Cdrom                     {DIMENSION5100C, DIMENSION5100C, ...}
16333 DCOM                      {DIMENSION5100C, DIMENSION5100C, ...}
 3654 MRxSmb                    {DIMENSION5100C, DIMENSION5100C, ...}
 3252 EventLog                  {DIMENSION5100C, DIMENSION5100C, ...}
 2220 VPCNetS2                  {DIMENSION5100C, DIMENSION5100C, ...}
 1082 E100B                     {DIMENSION5100C, DIMENSION5100C, ...}
 1057 W32Time                   {DIMENSION5100C, DIMENSION5100C, ...}
……(以下省略)……

 Group-Objectコマンドレットには、グループ化のキーとなるプロパティ名を指定できる。ここではイベント・ソースをキーとしているが、ほかにもイベントの種別(Typeプロパティ)やイベントID(EventIDプロパティ)などの単位でグループ化することも可能だ。

 また、ここではグループ化した結果を件数(Countプロパティ)について降順にソートしているが、昇順にソートしたい場合は、Sort-Objectコマンドレットの-Descendingパラメータを外せばよい。End of Article

「Windows TIPS」


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間