| [System Environment] | ||||||||||||
イベント・ログに任意の文字列を出力する
|
||||||||||||
|
||||||||||||
| 解説 |
Windowsマシン上で定期的に実施するシステム管理上のタスクは、可能な限りバッチ・ファイルやWSHを利用して自動化したい。また自動化を行うならば、動作の確認や障害発生に備えて、処理結果をログに出力したり、メールで送ったりしたい。
自前でログを作成するのはさほど難しい話ではない。だがログ・ファイルを格納する場所や書式が統一されていないと、事後確認が行いづらくなってしまう。
本TIPSでは、ログとして残したい内容をコマンドラインからイベント・ログに出力する方法をいくつか紹介する。Windows OSの標準機能であるイベント・ログに出力することにより、管理が容易になるというメリットがある。
| 操作方法 |
イベント・ログに書き込む方法
イベント・ログにユーザーがイベントを書き込む方法としては、次のような手段が利用できる。
- WSH(Windows Script Host)
- Eventcreateコマンド
- LogEventコマンド
- EventLogger(elogger.exe)コマンド
WSHを利用する方法
WSHを利用する方法は、既存のOS環境に対してアプリケーションを追加でインストールする必要がないので、最も広く利用できる方法だと思われる。WSHはWindows 2000以降のOSで利用可能だ。
次のサンプルを見てほしい。VBScriptで記述したコードである。
Const EVENT_SUCCESS = 0※この3行の内容を、例えばwsheventtest.vbsというファイル名で保存して、実行すること。 |
これを実行すると、次のようなイベント・ログが書き込まれる。
![]() |
|||||||||
| 書き込まれたイベント・ログ | |||||||||
| WSHから書き込んだイベント・ログの内容を表示させたところ。情報の種類は「なし」となっているが、イベント・ビューアの一覧では「情報」と表示される。 | |||||||||
|
ここではWscript.Shell(WshShell)オブジェクトの持つLogEventメソッドを使って、アプリケーション・ログに「WSH」をソースとして「情報」のエントリを書き込んでいる。
このLogEventメソッドを用いる場合、次の書式に従ってメッセージを構成する必要がある。「\\<コンピュータ名>」はリモート・コンピュータのログに書き込む際に指定するものであり、スクリプトを実行するローカルのコンピュータ上のログに書き込む場合は省略可能だ。
object.LogEvent(イベントの種類, メッセージ内容, \\<コンピュータ名>) |
イベントの種類は次の表に示すように、2進数で表記される。スクリプトの最初のパートで定数として宣言しておくとよいだろう。
|
種類 |
意味 |
|
0 |
成功 |
|
1 |
エラー |
|
2 |
警告 |
|
4 |
情報 |
|
8 |
成功の監査 |
|
16 |
失敗の監査 |
| イベントの種類 | |
| イベント・ログに書き込まれる種類。種類を「0」と指定すると、イベント・ビューアでは4と同じく「情報」として表示される。 | |
|
WSHを使ったイベント・ログへの出力方法の詳細については、右の関連記事中にあるTIPSや連載WSH入門などを参照していただきたい。
Eventcreateコマンドを利用する方法
Windows XP/Windows Server 2003ではeventcreate.exeというコマンドを利用してイベント・ログへエントリを追加することができる。
例えば、次のような構文で書き込む内容を記述する。詳細はeventcreate /?で表示されるヘルプなどを参照のこと。
eventcreate /ID 100 /L system /SO Cmd /T Information /D "テストメッセージ" |
ここでは「イベントID」「書き込みを行うログ」「ソース」「種類」「メッセージ内容」を指定している。
LogEventを利用する方法
logevent.exeは、Windows NT 4.0およびWindows 2000のリソース・キットに収録されているツールである。コマンドラインからイベント・ログへエントリを追加することができる。
|
利用可能なオプションは、引数を付けずに入力すればヘルプが表示されるので、参照のこと。例えば次のように利用する。
logevent -s W -r test -c 5 -e 2 "テストイベント" |
-sオプションはイベントの種類、-rはソース、-cは分類、-eは指定したいイベントIDを示す。なお-cオプションで利用可能な分類には次の7つがあるようだ。
|
分類 |
意味 |
|
1 |
デバイス |
|
2 |
ディスク |
|
3 |
プリンタ |
|
4 |
サービス |
|
5 |
シェル |
|
6 |
システム イベント |
|
7 |
ネットワーク |
| logeventの分類コード | |
Eventloggerを利用する方法
Eventlogger(実行ファイル名はeLogger.exe)は、でんか氏が作成・公開しているツールである。
このツールは、GUI画面とコマンドラインの両方で利用できる。パラメータを何も付けずに起動すると、GUI画面が表示される。
![]() |
||||||||||||||||||
| Eventloggerの実行画面 | ||||||||||||||||||
| イベント・ログに内容を書き込むツール。出力先はアプリケーション・ログのみのようである。 | ||||||||||||||||||
|
オプションを指定すると、コマンドラインからイベント・ログに書き込むことができる。-tオプションでは、次のものを指定可能だ。1〜4以外の数字を指定した場合は「情報」のログが書き込まれることになる。
|
種類 |
意味 |
|
1 |
警告 |
|
2 |
エラー |
|
3 |
成功の監査 |
|
4 |
失敗の監査 |
| Eventloggerで指定できるイベントの種類 | |
イベント・ログにメッセージを書き込む際の制限事項
ここでは、イベント・ログへの書き込みに関する制限事項についてまとめておく。
■書き込み先ログの種類
仕様上の制限として、セキュリティ・ログに書き込むことはできない。書き込めるのは「システム(System)」と「アプリケーション(Application)」ログのみである。詳しくはxcorp 氏の試行錯誤の結果である次の資料を参照していただきたい。
■1つのエントリに書き込めるサイズの制限
以下の「EventLog.WriteEntryメソッド」の解説(例外部分を参照)によると、それぞれのエントリのメッセージ部分は最大で16Kbytes(16384bytes)に制限されるようである。1つのエントリで書き込む内容はこのサイズを超えないように気を付けること。
■使用する文字列の制限
メッセージ中には“%数字”という文字列を含めないこと。これはOSがイベント・ログにエントリを作る際の処理ロジックに問題があり、メッセージ処理のループが発生するからである。手元で確認したところ、このような文字列を含めると、100回ほどのメッセージの繰り返しが見られた。
■「説明」に現れる、ソースとメッセージ・リソース・ファイルの組が登録されていないというエラーメッセージ
一般的には、ソースとそのソースに応じたメッセージ・リソースを格納したDLLの組がレジストリに登録されていないと、次の画面のようなエラー・メッセージが冒頭に表示される。
![]() |
|||||||||
| メッセージ・リソースが登録されていない場合のエラー | |||||||||
| ソースとメッセージ・リソースがレジストリに登録されていないと、メッセージの冒頭部分にこのような“うるさい”エラーが書き込まれてしまう。このエラーを解消するには、上に紹介した中の方法ではWSHの利用を推奨する。Windows XP/Windows Server 2003ならば、OS標準のeventcreate.exeコマンドを用いてもよい。 | |||||||||
|
このメッセージは無視してよいものだが、気になるのであれば、次の情報を参考にしてメッセージ・リソースをDLLに格納し、ソースを登録すればよいだろう。なお、LogeventとEventloggerでは、別途メッセージ・リソースを登録してもこのメッセージが消えなかったことを追記しておく。
■
以上のように、イベント・ログにメッセージを書き込むのはさほど難しいことではなく、スクリプトやバッチ・ファイルから手軽に利用できることがお分かりいただけたことと思う。バッチ・ファイルやスクリプトを作成したり、既存のものの手直しを行う際、ぜひともログ出力をどうするかという点も検討してほしい。![]()
| 関連記事 | ||
| Windows TIPS:WSHコードで発生したエラー情報をイベント・ログに記録する(Windows Server Insider) | ||
| 連載WSH入門―第7回「1.アプリケーション・イベント・ログの作成」(Windows Server Insider) | ||
|
||||||||||||||||||||||||||||
| 「Windows TIPS」 |
TechTargetジャパン
- クライアントでも利用可能になるHyper-V 3.0とは? (2012/2/9)
Windows 8では、従来のWindows Virtual PCに代わって新しくHyper-V 3.0がクライアント向けにも導入される。その概要を解説 - 第303話 ペアプロ2 (2012/2/7)
あっ、またまたいつぞやの幽霊が! …っと思ったら、何だ倉井さんかぁ…。はぁー、驚いた… - Excelで郵便番号変換ウィザードを活用する (2012/2/3)
Excelで管理している顧客名簿などで、不足している郵便番号や住所を入力するのは意外と面倒。郵便番号変換ウィザードを使えば、これらの入力が簡単になる - PCをシンクライアント化するWindows Thin PCとは? (2012/2/2)
VDI向けにシンクライアントがほしいけど専用機を買う余裕はない… Windows Thin PCなら既存PCを低コストでシンクライアント化できる。まずは概要を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -




