第13回 WshShellオブジェクトを利用する(2):基礎解説 演習方式で身につけるチェック式WSH超入門(3/3 ページ)
今回はレジストリを操作するメソッドのほか、イベント・ログの記録や環境変数の展開、ポップアップ・ウィンドウ表示のためのメソッドについて解説。
WshShellオブジェクトのうち、ここまででアプリケーションの操作をするメソッド、レジストリを扱うメソッドを紹介したが、残りのメソッドとプロパティのうち、派生するオブジェクトが存在しないものをここでまとめて紹介する(派生するオブジェクトが存在するメソッドやプロパティに関しては次回以降で解説する)。
Popupメソッド
Popupメソッドは、MsgBox関数(第3回の「WSHで条件分岐処理をする」を参照)と同様のメッセージ・ボックスを表示させるためのメソッドで、もともとMsgBox関数が存在しないJScriptから主として使用することを想定しているものと思われる。が、PopupメソッドにはMsgBox関数にはない便利な機能があるので、VBScriptから使う場合も有用である。
Popupメソッドの文法は以下の通りである。
intButton = objWshShell.Popup(strText,[nSecondsToWait],[strTitle],[nType])
strTextには表示するメッセージを指定する。これは省略不可能な引数であり、残りの引数は省略可能である。strTitleはメッセージ・ボックスのタイトル、nTypeはダイアログに表示するボタンとアイコンの種類を指定するもので、MsgBox関数と同様である。が、1つMsgBox関数にはない引数、nSecondsToWaitが存在する。この引数に時間(秒数)を指定すると、その時間の経過後にメッセージ・ボックスが自動的に閉じられる。ユーザーにこれから行う処理を示す際などに便利であろう。なお、メッセージ・ボックスが自動的に閉じられた場合Popupメソッドは-1を戻り値として返す。
※ファイル:Popup.vbs
Option Explicit
'オブジェクト変数の宣言とWshShellオブジェクトの作成。
Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")
Dim intButton
'Popupメソッドの第2引数に秒数を指定して実行。
intButton = _
objWshShell.Popup("このメッセージ・ボックスは5秒後に自動的に閉じます。" _
,5 , , vbOKOnly)
'Popupメソッドの戻り値で場合分け。
Select Case intButton
Case vbOK 'OKボタンを押したとき。
MsgBox "OKをクリックして閉じました。"
Case -1 '5秒たって自動的に閉じられたとき。
MsgBox "自動的に閉じられました。"
End Select
Set objWshShell = Nothing
このスクリプトを実行すると次のようになる。
このように、自動的に閉じられたかユーザーが閉じたかを判別して処理を書くことができる。
LogEventメソッド
イベント・ログとは、OSやアプリケーションで発生したイベント(エラーや情報など)が書き込まれたファイルであり、管理ツールのイベント・ビューアなどで閲覧することができる。システム管理者はイベント・ログをトラブル・シューティングの手助けにしたりする。WSHからもスクリプト実行中に発生したイベントをイベント・ログに書き込むことができる。それがLogEventメソッドだ(ただし、Windows 9x/Meにはイベント・ログがないので、代わりにWindows ディレクトリ内のWSH.logファイルに記録される)。
LogEventメソッドの構文は次の通り。
objWshShell.LogEvent intType, strMessage [,strTarget]
intTypeにはイベントの種類を指定する。以下の値が指定可能だ。
intType | 意味 |
---|---|
0 | SUCCESS(成功) |
1 | ERROR(エラー) |
2 | WARNING(警告) |
4 | INFORMATION(情報) |
8 | AUDIT_SUCCESS(成功の監査) |
16 | AUDIT_FAILURE(失敗の監査) |
LogEventメソッドのintTypeに指定するイベントの種類 |
strMessageにはログ・エントリのテキストを、省略可能なstrTargetにはコンピュータ名を指定可能である(デフォルトはローカル・コンピュータ)。
イベント・ログに「情報」ログを書き込むには例えば以下のようなスクリプトを実行するとよい。
※ファイル:LogEvent.vbs
Option Explicit
'オブジェクト変数の宣言とWshShellオブジェクトの作成。
Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")
'イベント・ログに「情報」ログを書き込む。
objWshShell.LogEvent 4, "スクリプトLogEvent.vbsを実行しました。"
Set objWshShell = Nothing
このスクリプトを実行し、イベント・ビューアを見ると以下のようなログが保存されている。
WSHから記録したイベント・ログの例
上側がイベント・ビューアのログで、それをダブルクリックすると、下側のようにイベント・ログのエントリの詳細が表示される。このようにWSHからイベント・ログにエントリを書き込める。
(1)スクリプトによって書き込んだイベント・ログ。
(2)ログの詳細。
WSHのスクリプトを実行中にエラーが発生した場合はエラー・エントリを記録したり、スクリプトが完了した際には成功エントリを記録したりする用途が考えられる。
ExpandEnvironmentStringsメソッド
ExpandEnvironmentStringsメソッドは、環境変数を展開するためのメソッドだ。例えば環境変数windir(Windowsディレクトリのパスが格納されている)を展開するには次のようにする。
※ファイル:ExpandEnvironmentStrings.vbs
Option Explicit
'オブジェクト変数の宣言とWshShellオブジェクトの作成。
Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")
'環境変数windirを展開。
MsgBox objWshShell.ExpandEnvironmentStrings("%windir%")
Set objWshShell = Nothing
このスクリプトを実行すると、次のように表示される。
このように、% 〜 % で囲んだ環境変数を展開することが可能である。なお、ExpandEnvironmentStringsメソッドはPROCESS環境領域に定義された環境変数のみを展開する。ほかの環境変数を取得するには、次回以降で解説する予定のEnvironmentプロパティを用いる必要がある。
CurrentDirectoryプロパティ
CurrentDirectoryプロパティは文字通り、カレント・ディレクトリを取得または設定するためのプロパティだ。
※ファイル:GetSetCurrentDirectory.vbs
Option Explicit
'オブジェクト変数の宣言とWshShellオブジェクトの作成。
Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")
'カレント・ディレクトリを取得。
MsgBox "現在のカレント・ディレクトリは、" & _
objWshShell.CurrentDirectory & _
"です。"
'カレント・ディレクトリを設定。
objWshShell.CurrentDirectory = "C:\"
'カレント・ディレクトリを取得。
MsgBox "現在のカレント・ディレクトリは、" & _
objWshShell.CurrentDirectory & _
"です。"
Set objWshShell = Nothing
このスクリプトをC:\scriptに保存して実行すると次のような結果が得られる。
このように、カレント・ディレクトリは通常スクリプトの存在するフォルダであるが、スクリプトから変更することが可能である。カレント・ディレクトリに存在するファイルはフルパスを記述せずともファイル名だけをRunメソッドの引数に指定したりすることができる。
今回はレジストリを扱うメソッドなどWshShellに含まれるメソッド・プロパティの一部を説明した。次回もこの続きを行う予定である。
Copyright© Digital Advantage Corp. All Rights Reserved.