WshShellオブジェクトのうち、ここまででアプリケーションの操作をするメソッド、レジストリを扱うメソッドを紹介したが、残りのメソッドとプロパティのうち、派生するオブジェクトが存在しないものをここでまとめて紹介する(派生するオブジェクトが存在するメソッドやプロパティに関しては次回以降で解説する)。
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
このスクリプトを実行すると次のようになる。
このように、自動的に閉じられたかユーザーが閉じたかを判別して処理を書くことができる。
イベント・ログとは、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のスクリプトを実行中にエラーが発生した場合はエラー・エントリを記録したり、スクリプトが完了した際には成功エントリを記録したりする用途が考えられる。
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プロパティは文字通り、カレント・ディレクトリを取得または設定するためのプロパティだ。
※ファイル: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.