すべてのWindowsシステム管理者は、おそらくWindowsイベントログに精通しているでしょう。このPowerShellのコマンドレットを使用すると、システム管理者は複数のコンピュータ上で一度に多くのイベントを解析することができます。イベントビューアでクリックして適切なフィルタを探したり、重要なイベントが保存されている場所を特定するために時間を費やす必要がなくなります。ただし、Get-EventLog
には欠点もあります。
Get-EventLog
コマンドレットは、すべての最新バージョンのWindows PowerShellで利用できます。最も単純な使い方では、このコマンドレットはクエリするイベントログを指定し、そのイベントログ内のすべてのイベントを表示します。
しかし、最初にイベントログの名前がわからない場合はどうでしょうか?その場合、まずローカルコンピュータで利用可能なすべてのイベントログを特定する必要があります。そのためには、Get-EventLog -List
コマンドを使用します。

ご覧の通り、現在私のローカルシステムにはいくつかのイベントログがありますが、他のイベントログはどこにあるのか疑問に思うかもしれません。イベントビューアの「アプリケーションとサービスログ」には数十の他のイベントログが表示されていますが、なぜここに表示されていないのでしょうか。
それらのイベントが必要な場合、残念ながらGet-EventLog
は機能しません。その代わりに、Get-WinEventを確認する必要があります。この時点でGet-EventLog
コマンドレットはレガシーコマンドレットと考えられるかもしれませんが、私はまだ頻繁に使用しているのは単純に使いやすいからです。
Get-EventLog
を使用したイベントのクエリ
今、利用可能なすべてのイベントログを知ったので、そのイベントログ内のイベントを読むことができます。たとえば、Applicationイベントログのすべてのイベントを表示したい場合、Get-EventLog
というコマンドレットでLogName
パラメータを指定する必要があります。そうすることで、そのイベントログ内のすべてのイベントが返されます。

デフォルトでは、出力には6つのプロパティしか表示されません:
Index
Time
EntryType
Source
InstanceId
Message
実際には、Get-EventLog
は16のプロパティを返します。6つしか表示されないのは、PowerShellの書式設定ルールによるものです。以下は、Get-EventLog
をパイプしてSelect-Object
に渡し、すべてのプロパティを選択した実際の出力の例です。

Get-EventLogでのフィルタリング
イベントを検索する際には、すべてのイベントを必要とするわけではありません。代わりに、いくつかのイベントのみが必要です。その場合、特定のイベントをフィルタリングする必要があります。Get-EventLog
には、タイムスタンプ、エントリータイプ、イベントID、メッセージ、ソース、ユーザー名に基づいてフィルタリングする方法がいくつかあります。これにより、イベントを見つけるためのほとんどの方法がカバーされます。
フィルタリングをデモンストレーションするために、定期的にイベントをクエリすることがあり、最新の10件のイベントを見つけたい場合、Newest
パラメータを使用して、表示するイベント数を指定します。例えば、Get-EventLog -LogName Application -Newest 10
は、最新の10件のイベントのみを返します。
特定の時点以降のすべてのイベントを検索したい場合には、After
パラメータを使用します。After
パラメータは日付/時刻を受け取るため、例えば、1/26/19 10:17 AM以降に発生したApplicationログ内のイベントのみを検索したい場合は、Get-EventLog -LogName Application -After '1/26/19 10:17'
とします。同様のプロセスを逆に行い、特定の日付よりも前に発生したイベントを選択する場合は、Before
パラメータを使用します。
Get-EventLog
には、タイムスタンプに基づいていないフィルタリング方法がたくさんあります。イベントID(インスタンスID)やメッセージなどの他の属性に基づいてイベントをフィルタリングすることもできます。例えば、IDが916のイベントを探している場合、InstanceId
パラメータに916を渡します。
フィルタを組み合わせることもできます。たとえば、メッセージにsvchostという文字列が含まれるイベントが多く返される場合、Get-EventLog
にMessage
パラメータを追加し、ワイルドカードsvchostを指定します。
ボーナススクリプト!
Get-EventLogを実世界のスクリプトで使う素晴らしい例が必要ですか?そうであれば、ラッキーです!以下は、Get-EventLog
の高度な使用例であり、今日すぐにダウンロードして使用できます!
サマリー
「Get-EventLog」コマンドレットは、一般的なイベントログのクエリを迅速に実行する必要がある場合に便利なコマンドです。使い方は簡単で、基本的なフィルタリング機能も提供しています。ただし、より詳細なイベントログの調査が必要な場合は、「Get-WinEvent」コマンドの方がおそらくより適していますが、少し使い方が難しく、XPathなどの構文を知る必要があります。