第7回 WshShellオブジェクトの詳細(3):Windows管理者のためのWindows Script Host入門(3/3 ページ)
レジストリはWindows環境を司るデータベースである。これを操作することで、さまざまな管理作業をスクリプトで自動化できる。
カレント・ディレクトリの取得と変更 ―― CurrentDirectoryプロパティ ――
スクリプト・ファイルが置かれた場所や、スクリプト・エンジンのファイル名は、WScriptオブジェクトから取得できる(関連リンク:第4回)。しかし、実際の作業フォルダはこれらとは異なっている場合がある。作業フォルダを取得するには、WshShellオブジェクトのCurrentDirectoryプロパティを利用する。また、このプロパティに値を設定することで作業フォルダを変更することができる。
CurrentDirectoryプロパティの利用例を次に示す。ディレクトリの移動をテストするため、最初のスクリプトを「D:\WSH\curdir.vbs」に、第2のスクリプトを「D:\WSH\Test\a.vbs」に作成する。
1: Set objShell = WScript.CreateObject("WScript.Shell")
2: Wscript.Echo objShell.CurrentDirectory
3: objShell.CurrentDirectory = "D:\WSH\Test"
4: Wscript.Echo objShell.CurrentDirectory
5: objShell.Run "wscript a.vbs"
WScript.Echo "a.vbs が実行されました!"
この例では最初にカレント・ディレクトリを表示し(curdir.vbsの2行目)、次に「D:\WSH\Test」に移動した後(3行目)、もう1度カレント・ディレクトリを表示する(4行目)。そして最後に「a.vbs」をwscriptで起動する(5行目)。この「a.vbs」は移動した後の「D:\WSH\Test」フォルダのみに置いておく。正しくカレント・ディレクトリが移動されていれば、パスを指定しなくてもこのスクリプト・ファイルが見つけられるはずだ。
実行すると次のようになる。
確かにa.vbsが実行された。なお、カレント・ディレクトリの移動はWSHのプロセス内のみで行われているため、コマンドプロンプトのカレント・ディレクトリはWSHの実行終了後も元の「D:\WSH」のままである。
ダイアログ・ボックスの表示 ―― Popupメソッド ――
Popupメソッドは、画面にメッセージ・ボックスを表示するメソッドである。GUIモードのwscriptで実行しても、コマンドライン・モードのcscriptで実行しても、メッセージ・ボックスのウィンドウが表示される。WScriptオブジェクトのWScript.Echoメソッドや、VBScriptのMsgBox関数でもメッセージ・ボックスは表示できるが、WshShellオブジェクトのPopupメソッドを利用すれば、ボタンやアイコンを自由に設定できるだけでなく、メッセージ・ボックスを表示する時間に制限を設けることもできる。
制限時間を設けることで、スクリプトの実行時に誰もいないような場合でも、自動的に実行を進めることができる。これを利用すれば、誰かがコンピュータを使っている場合にはいくつかの選択肢を提示し、誰もいなければ標準の動作を行う、といった使い方が可能になる。
Popupメソッドに渡すパラメータは、表示するメッセージ、制限時間、タイトル、タイプの4種類である。このうち、表示するメッセージ以外のものは省略可能である。メッセージとタイトルには文字列を、制限時間には秒数を指定する。秒数を省略した場合や0にした場合は、通常のメッセージ・ボックスと同じようにユーザーがボタンを押すまで待機する。
タイプには、メッセージ・ボックスに表示するボタンとアイコンを数値で指定する。この数値は、VBScriptであれば、あらかじめ決められた定数を利用できる。ボタンとアイコンの種類を以下に挙げる。
値 | 定数 | 意味 |
---|---|---|
0 | vbOKOnly | [OK]のみ表示する |
1 | vbOKCancel | [OK][キャンセル]を表示する |
2 | vbAbortRetryIgnore | [中止]「再試行]「無視]を表示する |
3 | vbYesNoCancel | [はい][いいえ][キャンセル]を表示する |
4 | vbYesNo | [はい][いいえ]を表示する |
5 | vbRetryCancel | [再試行][キャンセル]を表示する |
ボタンの種類 |
値 | 定数 | 意味 |
---|---|---|
0 | なし | アイコンを表示しない |
16 | vbCritical | 「STOP」アイコンを表示する |
32 | vbQuestion | 「?」アイコンを表示する |
48 | vbExclamation | 「!」アイコンを表示する |
64 | vbInformation | 「i」アイコンを表示する |
アイコンの種類 |
値 | 定数 | 意味 |
---|---|---|
0 | vbDefaultButton1 | 1番目のボタンにフォーカスを設定する |
256 | vbDefaultButton2 | 2番目のボタンにフォーカスを設定する |
512 | vbDefaultButton3 | 3番目のボタンにフォーカスを設定する |
デフォルトで入力フォーカスが設定されるボタン |
実際にPopupメソッドを呼び出す場合には、ボタンの種類を表す値とアイコンの種類を表す値を足し合わせて指定する。これらの数値はWin32 APIのMessageBox関数で指定するものと同じである。
Popupメソッドは、戻り値として押されたボタンに対応する数値を返す。制限時間内にボタンが押されなかった場合は-1が返される。以下は押されたボタンに対応する数値である。
値 | 定数 | 意味 |
---|---|---|
1 | vbOK | [OK]が押された |
2 | vbCancel | [キャンセル]が押された |
3 | vbAbort | [中止]が押された |
4 | vbRetry | [再試行]が押された |
5 | vbIgnore | [無視]が押された |
6 | vbYes | [はい]が押された |
7 | vbNo | [いいえ]が押された |
-1 | なし | 制限時間が経過した |
Popupメソッドからの戻り値 |
次の例では[OK]と[キャンセル]ボタンのあるメッセージ・ボックスを表示している。
1: Set objShell = WScript.CreateObject("WScript.Shell")
2: iBtn = objShell.Popup( _
3: "中止する場合は「キャンセル」を押してください。", _
4: 5, "処理を実行しますか?", vbOKCancel+vbQuestion)
5:
6: Select Case iBtn
7: Case vbOK
8: objShell.Popup "実行しました。", 5,, vbInformation
9: Case vbCancel
10: objShell.Popup "キャンセルしました。", 5,, vbInformation
11: Case -1
12: objShell.Popup "自動的に実行しました。", 5,, vbInformation
13: End Select
2行目から4行目までで、[OK]と[キャンセル]ボタンのあるメッセージ・ボックスが表示され、クリックされたボタンの情報が戻り値として返され、iBtn変数に記憶される。後半では、Select Case文(リファレンス・リンク:Select Case ステートメント)を用いて押されたボタンによって場合分けをし(6行目)、[OK]ボタンのみのメッセージ・ボックスを表示する。実行すると以下のようなダイアログが表示される。
このメッセージ・ボックスで[OK]ボタンや[キャンセル]ボタンをクリックすれば、それぞれ「実行しました」、「キャンセルしました」というメッセージが表示され、5秒間そのまま待っていれば「自動的に実行しました」というメッセージが表示される。次の図は5秒間待った場合のメッセージである。
今回まで3回にわたりWshShellオブジェクトについて解説した。次回はWshNetworkオブジェクトについて解説する。
Copyright© Digital Advantage Corp. All Rights Reserved.