ブログ

シャットダウンスクリプトの簡単な解説

2013年2月20日 10:00 | シスキュー技術部 | | 3,485 views
タグ: , , , ,

このエントリーをはてなブックマークに追加
はてなブックマーク - シャットダウンスクリプトの簡単な解説
reddit にシェア
Pocket
LINEで送る

vbs

VBS(VBスクリプト)を書いたのは初めてですが、昔ながらのバッチファイルでは実現できなさそうだったので、VBスクリプトの学習の意味を込めて作成しました。

Windows8にシャットダウンのショートカットを作る

宣言部

[vb]
Option Excplicit
[/vb]
この宣言は、あらかじめ変数を宣言しないと使えない、VBユーザーにはおなじみの宣言です。

タイプミスで変数名を間違えても、エラーが出てデバッグが楽になるので、宣言しておきます。

define部では変数の宣言をしています。

execParamは実行時のパラメータを受け取る配列。
intCounterは待機時間のカウンター
rtnは戻り値の格納用
WSHobjはWSHオブジェクトのインスタンス用
Argsはpopup.vbsの実行用文字列
WaitCounterは待機秒数の格納用
flgForthは強制オプション用のフラグ(Forceの間違いですが、見逃してください)

定数DEFAULT_COUNTERはデフォルトの待機時間

定数MINIMUM_COUNTERは最短待機時間。

最短待機時間は、たとえば待機時間ゼロで、誤ってスタートアップフォルダに入れてしまった時などのために入れていますが、普通に使ってる限りは必要のない部分かもしれません。

即時シャットダウンがほしければ、shutdown.exeを呼び出すバッチファイルを作ればよいだけですので、差別化のようなものと考えてください。

引数チェック

Argument Check & Set部では引数のセットなどを行っています。
[vb]
WScript.Arguments.Count
[/vb]
で引数の数が取れます。
[vb]
Set execParam = WScript.Arguments
[/vb]
で引数を配列に入れ、0からの配列の添え字で引数にアクセスできます。

多少込み入って見えますが、数値以外のものがセットされた時のためのもので、それほど複雑なことはしていません。

待機

Waiting loop部ではpopup.vbsを設定回数呼び出しています。
[vb]
Set WSHobj = WScript.CreateObject("WScript.Shell")
[/vb]
でWindowsScriptShellのインスタンスを作成し、runメソッドでpopup.vbsを呼び出しています。

popup.vbsはここで設定された引数でポップアップウィンドウを呼び出すだけのスクリプトですが、毎回呼び出すことで、できる限りポップアップが前面に表示されるようにしています。

前面で操作できるところにポップアップがないと、キャンセルなどができなくなってしまいます。

なかぽんの雑記さんの記事を参考にさせていただきました。

vbsでWshShell popupを前面に表示する

http://d.hatena.ne.jp/nakapon/20121120

popupは一秒待機して戻るように設定していますので、繰り返し呼び出すことにより、時間を設定できます。

popupのボタンが押された場合は、戻り値を受け取って、SELECT CASEで分岐させています。

戻り値1であれはOKボタンなので、シャットダウン用のプロシージャを呼び出します。

戻り値2であればキャンセルなので、終了処理をキャンセルするプロシージャを呼び出します。

戻り値がない場合は、何もしません。

設定回数ループが終わると、シャットダウン用のプロシージャを呼び出します。

シャットダウン用プロシージャ

[vb]
Set Wshshell = WScript.CreateObject("WScript.shell")
[/vb]
でオブジェクトWshshellにWScript.shellのインスタンスをセットします。

runメソッドでshutdown.exeを呼び出します。

強制フラグが1の場合は-fオプションを付きでshutdown.exeを呼び出します。

ここで使用しているオプションは

-s シャットダウンを行う

-t 待ち時間の設定、0であれば即時

-f 強制的に終了する

です。

shutdown.exeにはほかにもオプションがありますので、runメソッドの中身を書き換えれば、再起動やさまざまなカスタマイズが可能になります。

キャンセル用プロシージャ

[vb]
WScript.Quit
[/vb]
これでスクリプト自体の終了を行います。

VBでいえばEndやExitの代わりです。