Windows TIPS
[Scripting]
  Windows TIPS TOPへ
Windows TIPS全リストへ

WSHコードで発生したエラー情報をイベント・ログに記録する

解説をスキップして操作方法を読む

山田 祥寛
2004/10/09
 
対象OS
Windows NT
Windows 2000
Windows XP
Windows Server 2003
イベント・ログは、ハードウェアやソフトウェア、そのほか、システム全般の問題について情報を収集するための重要な手掛かりだ。
スクリプト内でエラーが発生した場合にも、エラー情報をイベント・ログに記録しておくことで、システム全体の一元的な監視が容易になる。
 
解説

 イベント・ログは、ハードウェアやソフトウェア、そのほか、システム全般で発生した処理/動作全般を記録するためのものだ。アプリケーションなどで何か問題が発生した場合にも、イベント・ログの内容を参照することで、問題発生までの過程をある程度推察することができる。

 本Windows TIPSでも、多くのWSH(Windows Script Host)スクリプトを紹介してきたが、当然、さまざまな環境/条件によっては、スクリプトが予期せぬエラーを発生することは大いにあり得る。そのような場合にも、エンド・ユーザーが常にエラー情報を記録しておいてくれれば、後から原因を究明する場合の大きな助けとなるが、多くの場合、エンド・ユーザーにそこまでの徹底を望むのは難しい。

 そこで本稿では、スクリプト・コード内で発生したエラー情報を、OS標準の監視機能であるイベント・ログに記録する方法を紹介する。もちろん、エラー情報を独自のログに記録することも可能ではあるが、イベント・ログを利用すると、システム管理者はイベント・ログ1つだけを監視すればよいので、より管理負荷を軽減することができるだろう。


操作方法

手順1―テキスト・エディタでスクリプトのコードを入力する

 まずはテキスト・エディタ(メモ帳でも何でもよい)を開き、以下のコードを入力してevent.wsfというファイルを作成してほしい。ただし引用符(')で始まる行はコードの意味を解説するためのコメント部分なので、省略してもよい。これは、データベース・ファイルをオープンして、検索する例である。

※ファイル event.wsf

<?xml version="1.0" encoding="Shift_JIS" ?>
<package>
  <job id="event">
  <?job error="true" debug="true" ?>
  <object id="db" progid="ADODB.Connection" />
  <object id="WshShell" progid="WScript.Shell" />
  <script language="VBScript">
  <![CDATA[
  ' エラー発生時にも実行を継続
  On Error Resume Next
  db.Provider="Microsoft.Jet.OLEDB.4.0"
  db.Mode=1
  ' ダミーのデータベースファイルを指定。データベース接続に失敗
  db.ConnectionString="d:\dummy.mdb"
  db.Open
  ' SQL命令の実行に失敗
  Set rs=db.Execute("SELECT * FROM dummy")
  ' Err.Numberプロパティが0より大きい場合、エラーが発生したことを意味する。
  ' エラー発生時にはエラーメッセージを、それ以外の場合は終了メッセージを記録
  If Err.Number>0 Then
    WshShell.LogEvent 1,WScript.ScriptFullName & Chr(13) & Chr(10) & Err.Description
  Else
    WshShell.LogEvent 0,WScript.ScriptFullName & "は正常終了しました。"
  End If
  ]]>
  </script>
  </job>
</package>
  • サンプル・ファイルのダウンロード
    注:サンプルevent.wsfを実行するには、上のサンプル・ファイルを右クリックしてevent.wsfというファイル名で保存する)

 WSHの実行ファイルは拡張子「.wsf」(Windows Scripting host File)とする必要がある。ファイル名自体は何でもよいが、ここでは「event.wsf」という名前で保存しておこう。

手順2―WSHのコードを実行する

 event.wsfを実行するには、エクスプローラなどからevent.wsfをダブルクリックするだけでよい。コード中では「d:\dummy.mdb」というファイルをオープンしようとしているが、このファイルが存在しない場合はエラーとなる(もしこのようなファイルがすでに存在している場合は削除しておくこと)。実行後、イベント・ビューアに次のようなエラー情報が記録されていれば成功だ。

イベント・ビューアに記録されたログ
WSHからイベント・ビューアにログを残すことができる。
  記録されたログ。種類は「エラー」となっている。→

 該当する行をダブルクリックすると、次のようなログが記録されていることが分かる。

記録されたイベントの詳細
WSHからも簡単にイベントを書き込むことができる。
  種類は「エラー」。ほかにも「警告」や「情報」などの種類がある。
  エラーの内容。この部分はシステムの返すエラー・メッセージがそのまま表示されている。

 コードの流れはスクリプト内のコメントを参照いただくとして、ここではイベント・ログへの記録を担当するLogEventメソッドに注目してみることにしよう。LogEventメソッドには、「イベントの種類」「ログメッセージ」の順で引数を指定する必要がある。LogEventメソッドで指定可能なイベントの種類は以下のとおりである。上のサンプル例では、1の「ERROR(エラー)」を指定している。

種類
0
SUCCESS(成功)
1
ERROR(エラー)
2
WARNING(警告)
4
INFORMATION(情報)
8
AUDIT_SUCCESS(成功の監査)
16
AUDIT_FAILURE(失敗の監査)
イベントの種類

 なお、イベント・ログを持たないWindows 9x/Me環境では、ログ情報はWindowsフォルダ内のWSH.logに記録される。End of Article

「Windows TIPS」


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間