(1) Windowsバッチでイベントログに出力する方法
(1-1) 構文
(1-2) サンプルプログラム
(1-3) 少し応用:ERRORLEVELの値に応じてログ出力
(1) Windowsバッチでイベントログに出力する方法
(1-1) 構文
(構文)
イベントログに書き出しするコマンド「eventcreate」を使います。オプションは最低限必須のもののみ記載しています。
eventcreate /id [イベントID] /l [ログの名前] /t [ログのレベル] /d "[説明文]"
(構文説明)
eventcreateの後に指定しているオプションの説明です。
rem オプション#1「/id」=項目「イベントID」に表示する値 ⇒[イベントID] rem オプション#2「/l」=項目「ログの名前」に表示する値 ⇒[ログの名前] rem オプション#3「/t」=項目「レベル」に表示する値 ⇒[ログのレベル] rem オプション#4「/d」=全般タブ説明欄に表示する値 ⇒[説明文]
(構文実例)
上記構文にサンプルの値を入れたものが以下です。これをコマンドプロンプトから実行すればイベントログに書き出しができます。
rem (例) eventcreate /id 999 /l application /t information /d "Test Message"
(参考)その他オプション
オプション | 英語名称 | 説明 | 備考 |
/id | id | 項目「イベントID」に表示する値 | 1~1000の数字 |
/l | logname | 項目「ログの名前」に表示する値 | イベントログを生成する分類を指定します(「APPLICATION」か「SYSTEM」.) |
/t | type | 項目「レベル」に表示する値 | イベントの種類を指定します。種類は以下の4つがあります。 SUCCESS ERROR WARNING INFORMATION」 |
/d | description | 全般タブ説明欄に表示する値 | |
/so | source | 項目「ソース」に表示する値 | イベントに使うソース(イベントを生成するアプリやコンポーネントを意味する名前)を指定します。 ※デフォルト値=EventCreate |
/s | system | 接続するリモートホストを指定。 | |
/u | user | イベント生成するユーザ名を指定。 | |
/p | password | イベント生成するユーザのパスワードを指定。 |
(1-2) サンプルプログラム
イベントログを出力するプログラムです。メッセージ変数を定義し、その変数の内容を説明欄に出力しています。
(サンプルプログラム)
rem 実行したコマンドは標準出力に表示しないようにする @echo off rem イベントログの説明欄に表示するメッセージを定義 set I_TEST=This is sample message of eventcreate rem イベントログに書き出し eventcreate /id 999 /l application /t information /d "%I_TEST%"
(図121)プログラム実行結果
(1-3) 少し応用:ERRORLEVELの値に応じてログ出力
上で紹介したサンプルプログラムを少しだけ応用させて、「何かの処理」を実行した結果が「エラーの場合」にイベントログを出力するという簡単な「if分岐」のバッチプログラムをご紹介します。
(サンプルプログラム)
@echo off set I_TEST=This is sample message of eventcreate rem ①何かの処理(適当にエラーになるように)⇒ 処理内容は(補足1)を参照 set word=STATE 1 STOPPED echo %word% | findstr RUNNING > nul 2>&1 rem ②ERRORLEVELの値チェック rem ③正常終了(ERRORLEVEL=0)ならOKにジャンプ(イベントログは生成しない) if %ERRORLEVEL% equ 0 goto OK rem ④もし正常終了以外ならイベントログに情報を出力する eventcreate /id 999 /l application /t information /d "%I_TEST%" rem 終了コード「999」を指定してexit。「/b」オプションでバッチを終了してコマンドプロンプトに制御を戻す exit /b 999 :OK
(補足1)「①何かの処理」の説明
この処理は分岐の効果を実感してもらうため、意図的に必ずエラーになる処理を書いて、後ろの分岐でOKに飛ばないようにしています。
具体的には変数wordに適当な文字列「STATE 1 STOPPED」を代入し、そのwordに対してfindstrコマンドで「RUNNING」という文言を探します。この結果は必ずfalseになるので、次のERRORLEVELのチェックで0以外の値になります(エラー扱い)。
ご参考ですが、最後の「> nul」で標準出力をnullにリダイレクトし、「2>&1」でエラー出力を標準出力にリダイレクトします。
(図131)
(図132)
(操作動画)
最初にERRORLEVELが「0」である事を確認した後に、サンプルプログラムを実行するとイベントログを出力してERRORLEVELが「999」に書き変わる様子を見る事ができます。