ステムの監視やトラブルシューティングを行う際、Windowsのイベントログを確認することは非常に重要です。PowerShellには、イベントログを簡単に取得できるコマンド Get-EventLog が用意されており、システム管理者やITエンジニアにとって強力なツールとなります。
本記事では、PowerShellの Get-EventLog コマンドについて、基本的な使い方からフィルタリング、応用テクニックまで詳しく解説します。イベントログの取得や管理を効率化したい方は、ぜひ最後までお読みください。
1. Get-EventLogとは?
Windowsには、アプリケーションやシステムの動作に関する情報を記録する「イベントログ」が存在します。イベントログには、エラー、警告、情報メッセージなどが記録され、システム管理や問題の特定に役立ちます。
PowerShellの Get-EventLog コマンドは、Windowsの「従来のイベントログ(レガシーイベントログ)」を取得するためのコマンドレットです。主に以下のようなイベントログを対象としています。
- Application(アプリケーションログ)
- System(システムログ)
- Security(セキュリティログ)
2. Get-EventLogの基本的な使い方
特定のログを取得する
まず、イベントログの種類(ログ名)を指定してログを取得する基本的な構文は以下の通りです。
Get-EventLog -LogName System
このコマンドを実行すると、 System ログに記録された最新のイベントが一覧表示されます。
最新のイベントを指定して取得
取得するイベントの数を制限したい場合は、 -Newest オプションを使用します。
Get-EventLog -LogName Application -Newest 10
このコマンドでは、Application ログの最新10件のイベントを取得します。
特定のイベントIDを取得
特定のイベントIDのログのみを取得したい場合は、 -InstanceId オプションを使用します。
Get-EventLog -LogName System -InstanceId 6005
このコマンドは、システムの起動時に記録されるイベントID「6005」のログを取得します。
3. イベントログをフィルタリングして取得する
特定の日付以降のログを取得
「過去◯日間のログ」や「特定の日付以降のログ」を取得したい場合は、 -After や -Before オプションを使用します。
Get-EventLog -LogName System -After (Get-Date).AddDays(-7)
このコマンドでは、過去7日間の System ログを取得します。
Get-EventLog -LogName Application -Before (Get-Date).AddDays(-30)
このコマンドでは、30日前までの Application ログを取得します。
特定のメッセージを含むログを取得
イベントログのメッセージに特定のキーワードを含むものを取得したい場合は、 Where-Object を組み合わせます。
Get-EventLog -LogName System | Where-Object { $_.Message -like "*error*" }
このコマンドでは、 System ログの中から「error」という文字を含むイベントのみを表示します。
4. イベントログをCSVやテキストファイルに保存する
取得したイベントログを外部ファイルに保存して、あとで分析したり共有したりすることも可能です。
CSVファイルに保存
Get-EventLog -LogName Application -Newest 50 | Export-Csv -Path "C:\Logs\ApplicationLogs.csv" -NoTypeInformation
このコマンドでは、最新の Application ログ50件をCSVファイルとして保存します。
テキストファイルに保存
Get-EventLog -LogName System -Newest 20 | Out-File -FilePath "C:\Logs\SystemLogs.txt"
このコマンドでは、最新の System ログ20件をテキストファイルとして保存します。
5. Get-EventLogの応用例
エラーログのみを抽出してメールで送信
定期的にエラーログを取得し、メールで送信するスクリプトを作成することも可能です。
$ErrorLogs = Get-EventLog -LogName Application -EntryType Error -Newest 10
$Body = $ErrorLogs | Out-String
Send-MailMessage -To "admin@example.com" -From "server@example.com" -Subject "最新のエラーログ" -Body $Body -SmtpServer "smtp.example.com"
このスクリプトでは、Application ログの最新のエラーイベントを取得し、その内容を管理者にメールで送信します。
スケジュールタスクで定期的にログを取得
PowerShellスクリプトをWindowsタスクスケジューラに登録することで、定期的にイベントログを取得し、管理することも可能です。
$Logs = Get-EventLog -LogName System -After (Get-Date).AddDays(-1)
$Logs | Export-Csv -Path "C:\Logs\DailySystemLogs.csv" -NoTypeInformation
このスクリプトを毎日実行するタスクを設定すれば、前日のシステムログを自動保存できます。
6. Get-EventLogの注意点と代替コマンド
Get-EventLogの制限
- 一部のログ(特にセキュリティ関連)は管理者権限が必要
- 詳細なイベント情報を取得するのが難しい
まとめ
PowerShellの Get-EventLog コマンドは、Windowsのイベントログを効率的に取得できる便利なツールです。本記事では、基本的な使い方からフィルタリング、応用テクニックまで紹介しました。