スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
 
 

運用 Windows管理者のためのWindows Script Host入門

第7回 WshShellオブジェクトの詳細(3)

1.アプリケーション・イベント・ログの作成
―― LogEventメソッド ――

海津智宏
2004/10/21


Windows管理者のための
Windows Script Host入門
WSHの内部構造
WSHスクリプト・コーディングの第1歩
WScriptオブジェクトの詳細(1)
WScriptオブジェクトの詳細(2)
WshShellオブジェクトの詳細(1)
WshShellオブジェクトの詳細(2)
WshShellオブジェクトの詳細(3)
WshNetworkオブジェクトの詳細
WshControllerオブジェクトの詳細
WSHスクリプトからのファイル操作(1)
WSHスクリプトからのファイル操作(2)

 前回に引き続きWshShellオブジェクトについて解説する。

アプリケーション・イベント・ログの作成
―― LogEventメソッド ――

 スクリプトによるバッチ処理を行う場合、指定時刻などに無人で処理が実行されるようにすることが多い。ユーザーがインタラクティブに利用する通常のアプリケーションなら、エラー発生時や処理完了時は、それぞれを表すメッセージを画面に表示すればよいが、無人実行時にエラー・メッセージを画面表示したところで何の役にもたたない。一般にこのような場合は、メール送信やイベント・ログへの書き込みなどの方法により、状況を管理者に伝えることになる。スクリプトを利用してメール通知を行うには、CDO(Collaboration Data Objects)というコンポーネントが使える(詳細は関連記事を参照)。一方、WshShellオブジェクトのLogEventメソッドを使えば、スクリプトを利用して、任意の情報をアプリケーション・イベント・ログに記録することができる。


TIPS:Windows標準機能とWSHを使ってメールを送信する
WSHコードで発生したエラー情報をイベント・ログに記録する

 イベント・ログはWindows OSの各種状況をログとして記録するためのしくみで、Windows NTカーネル・ベースのOS(Windows NT、Windows 2000、Windows XP、Windows Server 2003)で利用可能だ。記録されたログの内容は、専用ツールである「イベント・ビューア」で確認できる(コントロール・パネルの[管理ツール]−[イベント ビューア]アイテムから起動する)。

イベント・ビューア
Windows NTカーネル・ベースのWindows OSでは、OS実行時の各種情報ログがイベント・ログとして記録されている。ログの内容はイベント・ビューアというツールで確認できる。このようにデフォルトでは3つのカテゴリ別にログが記録される。
  カテゴリ。イベントは各カテゴリごとに分類して記録されている。
  イベント一覧。これは「アプリケーション」カテゴリのイベントを表示したところ。

 画面から分かるとおり、イベントは「アプリケーション」「セキュリティ」「システム」といったカテゴリ別に記録されている(デフォルト時。サーバOSなどでは、これら以外にも「DNS サーバー」や「ディレクトリ サービス」「ファイル レプリケーション サービス」などのカテゴリが追加されていることもある)。このうちWSHスクリプトから記録できるのは「アプリケーション」カテゴリのイベント・ログである。

 イベント・ログに記録される各ログには、「情報」「警告」「エラー」などの分類がある。イベント・ビューアでは、情報の種類を示すアイコンを表示することで、必要な情報を素早く見つけられるようにしている。設定可能なログの種類は以下の6種類である。(実際には、「成功」はイベント・ビューアでは「種類なし」となり、一覧表示中では「情報」として表示される)

アイコン 種類 定数
成功 SUCCESS
0
エラー ERROR
1
警告 WARNING
2
情報 INFORMATION
4
成功の監査 AUDIT_SUCCESS
8
失敗の監査 AUDIT_FAILURE
16

 WSHスクリプトでは、表中のこの「種類」を表す「値」と、ログに書き込む文字列をLogEventメソッドに渡すことで、アプリケーション・イベント・ログへの書き込みができる。具体的には次のようにする。

Set objShell = WScript.CreateObject("WScript.Shell")
objShell.LogEvent (種類), "(書き込む文字列)"

LogEventメソッド(WSHリファレンス)

 これだけでイベント・ログへの書き込みは完了だ。例えば次の例では、すべての種類のログを書き込んでいる。

Set objShell = WScript.CreateObject("WScript.Shell")
objShell.LogEvent 0,"成功のテストです。"
objShell.LogEvent 1,"エラーのテストです。"
objShell.LogEvent 2,"警告のテストです。"
objShell.LogEvent 4, "情報のテストです。"
objShell.LogEvent 8, "成功の監査のテストです。"
objShell.LogEvent 16, "失敗の監査のテストです。"

 このコードを実行してイベント・ビューアを開くと、6個のログが追加されているのが確認できる。こうしてイベント・ログに情報を記録しておけば、イベント・ビューアを始めとするイベント・ログ関連ツールやコマンド(eventcreate.exeやeventquery.vbs、eventtriggers.exeなど。これらはWindows XP/Windows Server 2003で利用可能)を利用して、後で情報を確認したり、整理したりできる。

サンプル・スクリプト実行後のイベント・ビューア
サンプル・スクリプトの実行によって6個のログが記録されている。ただし、「成功」のログは「情報」として表示される。
  サンプル・スクリプトの実行によって記録されたイベント。

 また、第3パラメータとしてコンピュータ名を指定することで、権限があればほかのコンピュータのイベント・ログに書き込みを行うこともできる。この機能を使う場合、コードは次のようになる。

objShell.LogEvent (種類), "(書き込む文字列)" , "(コンピュータ名)"

レジストリの値の取得と設定 ―― RegRead/RegWrite/RegDeleteメソッド

 Windowsでは、OSの状態(起動時アプリケーション、システムに追加されたコンポーネントなど)や各種アプリケーション設定など、さまざまな情報がレジストリ(registry)と呼ばれるデータベースに保存されている。従ってこのレジストリの値を参照してOSやアプリケーションの現在の状態を知ることができるし、レジストリの値を変更してOSやアプリケーションの挙動を変えることもできる。WSHスクリプトを利用してシステム管理を行うという意味では、レジストリ操作は中心となる作業の1つだろう。

TIPS:WSHでレジストリの読み書きを行う

 WshShellオブジェクトのRegReadメソッドやRegWriteメソッド、RegDeleteメソッドを利用することにより、WSHスクリプトからレジストリの値を取得/設定/削除することができる。

 各メソッドの使い方を説明する前に、WSHスクリプトでレジストリを扱う際の基本について簡単に解説しておこう。

 レジストリは、フォルダ構造と似たツリー構造となっており、特定の項目を指定するには、ルート・キーからのパスをバックスラッシュで区切って表現する。例えば「HKEY_CLASSES_ROOT\.html\Content Type」という項目は、ルート・キー「HKEY_CLASSES_ROOT」中の「.html」キーにある「Content Type」という値を示す。「キー」がフォルダ、「値」がファイルに対応すると考えれば分かりやすいだろう。

 ルート・キーには下の表に示す5種類があるが、そのうち「HKEY_CURRENT_USER」「HKEY_LOCAL_MACHINE」「HKEY_CLASSES_ROOT」については「HKCU」「HKLM」「HKCR」という略記が許されている(スクリプトでも略記できる)。この略記法を使うと、例えば「HKCR\.html\Content Type」などと短い表記で項目を表すことができて便利だ。

ルート・キー 略記
HKEY_CURRENT_USER HKCU
HKEY_LOCAL_MACHINE HKLM
HKEY_CLASSES_ROOT HKCR
HKEY_USERS HKEY_USERS
HKEY_CURRENT_CONFIG HKEY_CURRENT_CONFIG

 1つのキーには、名前のない「既定」の値が1つあり、それ以外に名前の付いた値がいくつか設定される。WSHでは、バックスラッシュで終わるパスは既定値であると認識される。例えば「HKEY_CLASSES_ROOT\.html\」は「.html」キーの既定値を示す。名前付きの値を指定する場合は末尾に「\」を付けてはならず、既定値を指定する場合には「\」を最後に付けなければならないので注意が必要である。

 それぞれの値には型があり、文字列、整数、2進数値、環境変数で展開可能な文字列、文字列の配列をそれぞれ格納できる。型の一覧とVBScriptで対応する型を次の表で示す。

型名 意味 VBScriptでの型
REG_SZ 文字列 文字列
REG_DWORD 整数 整数
REG_BINARY 2進数値 整数のVBArray
REG_EXPAND_SZ 展開可能な文字列 文字列
REG_MULTI_SZ 文字列の配列 文字列のVBArray

 VBScriptでは、「2進数値」は1byteごとに区切られた数値の配列として扱われる(実例については後述する)。「展開可能な文字列」には「%SystemRoot%」など、環境変数を“%”で囲んだ表記が使える。最終的には、前回で解説したExpandEnvironmentStringsメソッドにより展開されて利用される。


 INDEX
  [運用]Windows管理者のためのWindows Script Host入門
  第7回 WshShellオブジェクトの詳細(3)
  1.アプリケーション・イベント・ログの作成
    2.WSHスクリプトからのレジストリ操作
    3.カレント・ディレクトリ操作とダイアログ・ボックス表示
 
 運用

ホワイトペーパーTechTargetジャパン

Windows Server Insider フォーラム 新着記事

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

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT

ソリューションFLASHPR