イベントログに情報を出力してみる

概要

Windowsバッチ処理で色々なことをさせていますが、その中でイベントログに出力する方法を色々と調べたので、記事に纏めておきます。

PowerShell でイベントログに出力する

イベントソースを登録する

PowerShell で作成した処理でイベントログに出力するには、あらかじめイベントソースを登録しておく必要があります。

イベントソースを登録する.ps1

New-EventLog -LogName Application -Source "EventPS"
  • 管理者権限のユーザで実行する必要があります。
  • オプション -Source には、登録するイベントソースの名称を指定します。
  • 既に同名のイベントソースが登録されている場合は、以下のエラーが発生します。
New-EventLog : "EventPS" ソースは、既に "localhost" コンピューターに登録されています。
発生場所 行:1 文字:1
+ New-EventLog -LogName Application -Source EventPS
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [New-EventLog]、InvalidOperationException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.NewEventLogCommand

イベントログを出力する

イベントログを出力する.ps1

Write-EventLog -LogName Application -Source "EventPS" -EventID 1 -Message "イベント出力テスト"
  • オプション -Source には、上記で登録したイベントソースの名称を指定します。
  • オプション -EventID には、任意の数値を指定します。
  • イベントログの出力は、Users権限のユーザで実行することが出来ます。
    *イベントソースが登録されていない場合は、以下のエラーが発生します。
Write-EventLog : ソースが見つかりませんでしたが、いくつかまたはすべてのログを検索できませんでした。アクセス不可能なログ
: Security
発生場所 行:1 文字:1
+ Write-EventLog -LogName Application -Source EventPS -EventID 1 -Mess ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [Write-EventLog], SecurityException
+ FullyQualifiedErrorId : System.Security.SecurityException,Microsoft.PowerShell.Commands.WriteEventLogCommand

イベントソースの登録状態を確認

既に登録されているイベントソースを確認します。

イベントソースの登録状態を確認.ps1

Get-ChildItem -Path HKLM:SYSTEM\CurrentControlSet\Services\EventLog\Application

以下の形で結果が出力されます。

Name                           Property
----                           --------
.NET Runtime                   EventMessageFile : C:\Windows\System32\mscoree.dll
TypesSupported   : 7
.NET Runtime Optimization Serv EventMessageFile : C:\Windows\System32\mscoree.dll
ice                            TypesSupported   : 7
Application                    CategoryCount       : 7
CategoryMessageFile : C:\WINDOWS\system32\wevtapi.dll
:
:
EventCMD                       EventMessageFile : C:\WINDOWS\System32\EventCreate.exe
TypesSupported   : 7
CustomSource     : 1
EventPS                        EventMessageFile : C:\Windows\Microsoft.NET\Framework64\v4.0.30319\EventLogMessages.dll
:
:
WSH                            EventMessageFile : C:\WINDOWS\System32\wshext.dll
TypesSupported   : 31

イベントソースを削除する

登録したイベントソースを削除する場合は、以下のコマンドを実行します。

Remove-EventLog -Source "EventPS"
  • 管理者権限のユーザで実行します。
  • オプション -Source には、上記で登録したイベントソースの名称を指定します。
  • 次項の、バッチファイルで登録したイベントソースも削除出来るようです。

バッチファイルでイベントログに出力する

イベントソースを登録・出力する

イベントソースを登録・出力する.bat

EventCreate.exe /L Application /SO EventCMD /T Information /ID 1 /D "イベントソース登録・出力テスト"

以下の結果が出力されます。

成功: 種類が 'Information' のイベントが、'Application' ログ内に、'EventCMD' をソースとして作成されました。
  • オプション /SO に指定した文字列が、イベントソース名になります。
  • 初めてのイベントソースを指定する場合は、イベントソースの登録が行われるため、管理者で実行する必要があります。
  • バッチファイルの文字コードは、SJISANSI)で保存します。それ以外の文字コードでは出力されたイベントログが文字化けする場合があります。

バッチファイルから、PowerShellのイベント出力コマンドを実行する場合

PowerShellのイベント出力コマンドを実行する.bat

PowerShell.exe Write-EventLog -LogName Application -Source "EventPS" -EventID 1 -Message "イベント出力テスト"

VBScript でイベントログに出力する

イベントログを出力する

イベントログを出力する1.vbs

Set obj = WScript.CreateObject("Wscript.Shell")
obj.LogEvent 0, "イベント出力テスト"

イベントログを出力する2.vbs

WScript.CreateObject("Wscript.Shell").LogEvent 0, "イベント出力テスト"
  • イベントログの出力先は、Application になります。
  • VBScript の場合は、イベントソース WSH で出力されるため、事前にイベントソースの登録を行う必要はありません。
  • ひとつめの引数は、イベントIDを指定します。
イベントID 意味
0 情報
1 エラー
2 警告
4 情報
8 情報/成功の監査
16 情報/失敗の監査

記事内の環境について

コメント