Powershellで、イベントログ出力

シェアする

日常業務の自動化のため、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)