日常業務の自動化のため、Powershellで作成して定期的に繰り返し実行している場合など、ログを記録する場面はよくあると思います。簡易的に、テキスト・ファイルに書き出すことも多いですが、これをWindows EventLogに出力できるとちょっと便利なことが多いと思います。
Windows EventLogに出力するメリット
- イベント発生時に、メール送信やプログラム実行する機能が、組込まれている
- 標準のログ管理に組み込むことで、既存のログ監視の仕組みと連携を取りやすい。
- 確認対象のログが少なくなることで、管理工数の削減
そこで、Powershellスクリプトの中で、イベントを作成する(ログを書き込む)したいと思います。 出力先は、標準で用意されているイベントログ(システム、セキュリティ、アプリケーション)のうち、アプリケーションログです。 イベント作成元のアプリケーション名は、事前に決定しておき、毎回同じものを使います。サンプルでは、$EventSourceNameにて、「PowerShellScript」と指定しています。 イベントID、レベル(エラー、警告、情報)などは、任意に設定できるので、必要に応じて使い分けると、ログの見通しがよくなり、イベントのハンドリングも容易になると思いますので、うまく設計してみてください。
# Windowsイベントのソース名(任意の名称を指定可) $EventSourceName = `PowerShellScript` # イベントソースが登録済みでない場合は登録する処理 IF ( [System.Diagnostics.EventLog]::SourceExists( $EventSourceName ) -eq $False) { New-EventLog -LogName Application -Source $EventSourceName } # イベントソースを削除する場合 # Remove-EventLog -Source $EventSourceName Write-EventLog -LogName Application -EntryType Information -Source $EventSourceName -EventId 1000 -Message `情報レベルのログメッセージ` Write-EventLog -LogName Application -EntryType Error -Source $EventSourceName -EventId 1001 -Message `エラーレベルのログメッセージ`
検証環境
以下の環境で動作テストしています
- Windows 7 & Windows 2008R2
- Powershell 2.0 (WMF2.0)