以前、このような投稿をしました。
WMIC で イベントログをローテーション
今回は PowerShell でイベントログを保存してみたいと思います。
イベントログ関連のコマンドレットとしては以下のようなものがあります。
PS >get-command "*EventLog" | Format-Table name Name |
イベントログの情報取得 (Get-EventLog) や、イベントログに情報出力 (New-EventLog) はあるのですが、イベントログを
evt 形式で保存するようなコマンドレットはないみたいなのですよね。
# Export-CSV でファイルにリダイレクトすることはできますが。
evt 形式でイベントログを保存するためには、WMI を使って BackupEventLog をコールする必要があるようです。
結果、WMIC と一緒になりますね。
以下のような PowerShell を実行する事でイベントログを取得し、evt 形式でファイルに保存することが可能です。
# backupeventlog は既にファイルが存在していると保存されないため、Test-Path でファイルの存在確認をして
ファイルが存在している場合は削除しています。
$LogDir = "C:temp" |
ポイントとしては、
- [PSBase.Scope.Options.EnablePrivileges = $true] を設定する
- [Security] のログは、[管理者グループ (Administrators) かつ、[管理者として実行]] していないと取得できない
というところかと。
EnablePrivileges を設定しないで [BackupEventLog] をコールすると [アクセスが拒否されました] というエラーになることがあります。
# Windows Server 2003 だと現象が発生したのですが、Windows 7 だと発生しませんでした…。
この辺りに関しては以下の情報が参考になります。
Vista – Win32_NTEventLogFile BackupEventLog: Access denied
WMI による Windows の管理
Security のログは通常のイベントビューアーでも Administrators しか表示することができないのですが、PowerShell で
Security のログを操作するときは Administrators かつ、管理者として実行する必要があります。
セキュリティログに関しては、以下の情報が分かりやすいかと。
サーバー管理者のためのイベントログ運用の基本
Administrators グループのユーザーで管理者として実行していない場合の [Get-WmiObject win32_nteventlogfile] の実行結果がこちらです。
Get-WmiObject win32_nteventlogfile | Format-Table LogfileName
LogfileName |
管理者として実行した結果がこちらになります。
Get-WmiObject win32_nteventlogfile | Format-Table LogfileName
LogfileName |
[Security] が取得できているのが確認できますね。
?
この辺の情報はお客様先で障害があったときに使用する事がありますのでバッチで簡単に EVT 形式のファイルに保存できると
問い合わせがあったときに情報を取得してもらうのが楽にできてよいですね。