イベント ログとイベント ログ イベントの管理

Get-EventLog コマンドレットには 2 つの用途があります。イベント ログの管理と、そのイベント ログに含まれるイベントの取得です。

たとえば、コンピュータ上のイベント ログに関する何らかの基本情報が必要だとします。この場合、Get-EventLog を呼び出すとき -list パラメータを指定します。

PowerShell
Get-EventLog -list
 

その結果、次のような情報が返されます。

PowerShell
Max(K) Retain OverflowAction        Entries Name
------ ------ --------------        ------- ----
15,168      0 OverwriteAsNeeded       5,279 アプリケーション
   512      7 OverwriteOlder            145 Credential Manager
   512      7 OverwriteOlder             12 MNP Toc Editor
15,360      0 OverwriteAsNeeded          88 MonadLog
15,360      0 OverwriteAsNeeded         324 PowerShell
30,016      0 OverwriteAsNeeded      51,510 セキュリティ
15,168      0 OverwriteAsNeeded       6,457 システム
 

特定のイベント ログに関する情報のみが必要なときに Where-Object コマンドレットを使用すると、LogDisplayName がたとえば System と一致するログのみを取得するように制限されます。

PowerShell
Get-EventLog -list | Where-Object {$_.logdisplayname -eq "System"}
 

おわかりのように、戻り値はいずれもシステム イベント ログに関する情報です。

PowerShell
Max(K) Retain OverflowAction        Entries Name
------ ------ --------------        ------- ----
15,168      0 OverwriteAsNeeded       6,458 システム
 

ただし、これは単なる手始めで、前述のように、Get-EventLog を使用してイベント ログのイベントを探すこともできます。たとえば、次のコマンドは、システム イベント ログのすべてのイベントを取得します。

PowerShell
Get-EventLog system
 

この結果、次のように長くスクロールするリストになります (イベント ログのレコード数によって変わります)。



必要以上の情報を得られましたか。次に、-newest パラメータを使用し、ログに記録されているイベントのうち、最新の x 個のみを取得します。たとえば、次のコマンドは、システム イベント ログの最新の 3 つのイベントを取得します。

PowerShell
Get-EventLog system -newest 3
 

返される情報の種類を示します。

PowerShell
Index Time          Type Source                EventID Message
----- ----          ---- ------                ------- -------
 5811 May 13 09:42  Erro W32Time                    29 タイム プロバイダ...
 5810 May 13 09:42  Warn W32Time                    36 タイム プロバイダ...
 5809 May 13 09:13  Warn DnsApi                  11194 システムは DNS ...
 

より詳細情報を取得するには、戻り値を Format-List コマンドレット経由でパイプ処理します。

PowerShell
Get-EventLog system -newest 3 | Format-List
 

次のような戻り値になります。

PowerShell
Index              : 5811
EntryType          : Warning
EventID            : 36
Message            : タイム プロバイダが使用可能なタイム スタンプを提供できていないため、
                     システム時刻を 49152 秒同期することができません。システム時刻の同期は
                     とれていません。
Category           : (0)
CategoryNumber     : 0
ReplacementStrings : {59}
Source             : W32Time
TimeGenerated      : 5/13/2006 9:42:22 AM
TimeWritten        : 5/13/2006 9:42:22 AM
 

イベントのサブセットを返すには、Where-Object コマンドレット経由でパイプ処理することもできます。たとえば、次のコマンドは、EventID が 403 と一致する Windows PowerShell イベント ログ内のイベントのみが取得されます。

PowerShell
Get-EventLog Windows PowerShell | Where-Object {$_.EventID -eq 403}
 

予想されているように、戻り値は EventID が 403 のイベントです。

PowerShell
Index Time          Type Source                EventID Message
----- ----          ---- ------                ------- -------
   58 May 12 09:09  Info Windows PowerShell                403 Engine state is chang...
   34 May 10 15:39  Info Windows PowerShell                403 Engine state is chang...
   16 May 09 15:28  Info Windows PowerShell                403 Engine state is chang...
 

次に、気の利いた小さいコマンドを紹介します。Windows PowerShell イベント ログのすべてのイベントを取得し、Group-Object コマンドレットを使用して EventID ごとにイベントをグループ化するコマンドです。つまり、次のコマンドは、各 ID のイベントの合計数を計算します (たとえば、EventID が 300 のイベントが 2 つ発生し、EventID が 400 のイベントが 6 つなどです)。次に、このデータは Sort-Object コマンドレット経由でパイプ処理され、結果は EventID ごとに並べ替えられます。以下にコマンドを示します。

PowerShell
Get-EventLog Windows PowerShell | Group-Object eventid | Sort-Object Name
 

そのコマンドを実行した結果は次のとおりです。

PowerShell
Count Name                      Group
----- ----                      -----
    2 300                       {TVSFRANK, TVSFRANK}
    6 400                       {TVSFRANK, TVSFRANK, TVSFRANK, TVSFRANK...}
    3 403                       {TVSFRANK, TVSFRANK, TVSFRANK}
   42 600                       {TVSFRANK, TVSFRANK, TVSFRANK, TVSFRANK...}
   21 601                       {TVSFRANK, TVSFRANK, TVSFRANK, TVSFRANK...}
 

関連リンク