概要
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 に指定した文字列が、イベントソース名になります。
- 初めてのイベントソースを指定する場合は、イベントソースの登録が行われるため、管理者で実行する必要があります。
- バッチファイルの文字コードは、SJIS(ANSI)で保存します。それ以外の文字コードでは出力されたイベントログが文字化けする場合があります。
バッチファイルから、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 | 情報/失敗の監査 |
記事内の環境について
- OS:Windows 10 Pro バージョン 20H2
- PowerShell:PSVersion 5.1.19041.1320

コメント