Windows TIPS
[PowerShell] |
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パラメータを外せばよい。
Windows Server Insider フォーラム 新着記事