Windowsマシンのイベントログを手動で書き込む方法を紹介します。
イベントID や ソース、Error/Warning/Infomation などのログレベルも指定することができるので、監視設定を追加したあとに想定通りに検知できるかの確認にも使えると思います。
コマンドプロンプトで行う方法
コマンドプロンプトでイベントを記録する場合のコマンドは、eventdreate コマンドです。
オプションは以下があります。
- /L … イベントの種類を指定(system / application)
- /T … イベントのログレベルを指定(SUCCESS / ERROR / WARNING / INFORMATION)
- /SO … イベントのソースを指定
既存のソースでも任意の文字列でも受け付けます。
指定しなかった場合のソースは、EventCreate になります。 - /ID … イベントIDを指定
ヘルプには 1 ~ 1000 の範囲のどの数字も有効 と記載されている。逆にいうと1001以上は受け付けない。 - /D … イベントのメッセージを指定
以下が実際に実行してみた結果です。
1 2 3 |
> eventcreate /ID 123 /L Application /SO ASP.NET /T WARNING /D "【テスト】イベントログの書き込みテストです。" 成功: 種類が 'WARNING' のイベントが、'Application' ログ内に、'ASP.NET' をソースとして作成されました。 |
以下がイベントビューワでの表示です。指定した内容が記録されていますね。
イベントID は本当に1000までしか対応していないのか確認してみた。
1 2 |
> eventcreate /ID 1001 /L Application /SO test /T information /D "【テスト】イベントログの書き込みテストです。" エラー: イベント ID は 1 から 1000 の範囲内でなければなりません。 |
やっぱりだめでした。。。これだと例えば1001以上のイベントIDでアラートを検知するようなことは難しいですね。1001以上のイベントIDを使いたい場合は、Powershell の コマンドで実現できます。
PowerShell で実行する方法
Powershell でもイベントログを記録するコマンドが用意されていますので紹介します。
イベントログを記録
コマンドは Write-EventLog を使用します。
オプションは以下です。
- -LogName … イベントの種類を指定(system / application)
- -EntryType … イベントのログレベルを指定(SUCCESS / ERROR / WARNING / INFORMATION)※省略可能
- -Source … イベントのソースを指定
- -EventId … イベントのイベントIDを指定
- -Message … イベントのメッセージを指定
Eventcreate コマンドではソースを省略できましたが、Write-EventLog では省略できません。
その代わりにイベントIDは1001以上でも使用できます。実際に試してみました。
1 2 |
PS > Write-EventLog -LogName Application -Source test -EventID 100001 -EntryType Information -Message "【テスト】イベントログの書き込みテストです。" Write-EventLog : パラメーター 'EventId の引数を確認できません。引数 100001 が、最大許容範囲 65535 を超えています。65535 以下の引数を指定して、コマンドを再度実行してください。 |
さすがに6桁は不可でした。↑の最大許容範囲 の 65535 を指定して実行したイベントビューワの表示が以下です。
イベントID 65535 が認識されています。ただ、メッセージの箇所が指定してものでなくエラーメッセージが表示されてしまっています。
これは、あらかじめソースを作成しておくことでエラーメッセージが表示されなくなります。ソースを作成する方法は以下。
イベントソースを作成
New-EventLog コマンドを使用します。
- -LogName … イベントの種類を指定
- -Source … イベントのソースを指定
このコマンドは管理者権限で実行する必要があります。早速試してみました。
1 |
PS > New-EventLog -LogName Application -Source test1 |
特に結果は表示されません。エラーがでなければ作成されていると思います。続いて作成したソースを指定してイベントを発行してみます。
1 |
PS > Write-EventLog -LogName Application -Source test1 -EventID 65535 -EntryType Information -Message "【テスト】イベントログの書き込みテストです。" |
↑のコマンドを実行した結果が以下の画像です。
指定したソースでイベントが記録されており、メッセージの箇所にもエラーは表示されていません。
例えば、TASK というイベントソースを作成しておき、バッチ処理完了時にTASKというソースを指定してバッチ完了のイベントを記録する、といったようなことも可能になります。
まとめ
以上がコマンドプロンプトと Powershell でイベントを記録する方法と、イベントソースの作成でした。
お手軽にイベントログに記録をしたい場合は、コマンドプロンプトで良さそうですね。運用面などで少し凝った使い方をする場合はやっぱりPowershell を使うのが無難でしょうか。
以上です。
↓↓↓ Powershell のおすすめレシピ ~結局はオライリー~