うちの会社にはTeraStationが3台あるんですが、UPSは1台しかないのです。
最近のTeraStationなら、3台をそれぞれ連携させて全てをシャットダウンすることもできるみたいですが、残念ながらうちの会社にあるのはけっこう古いやつで、連携機能が無いみたいです。
仕方が無いので、UPSに繋がってるPCが電源異常を感知したら、各TeraStationにシャットダウンの命令が出せるようなスクリプトを作れないかと思ったので、
まずはそれぞれをシャットダウンする部分を作ってみました。
1.TS-0.3TGL/R5の場合これが一番古いタイプです。
その為かシャットダウンを実行する部分は非常に単純で、exec()でIEを実行するときにURLを指定するだけです。
(下のリストだと右端が切れてますが、テキストエディタなどに行ごとコピペすると出てきます)
それ以降のスクリプトはIDとPASSを入力する為のものです。
////////////////////////////////////////////////////
//TS-0.3TGL/R5をシャットダウンするスクリプト
////////////////////////////////////////////////////
dim Id; Id = "admin"
dim Pass; Pass = "password"
dim TS; TS="TeraStation1"
exec("C:\Program Files\Internet Explorer\iexplore.exe http://"+TS+"/cgi-bin/ts.cgi?page=maintenance&mode=shutdown&txtClickButton=shutdown&type=setup")
////////////////////////////////////////////////////
//パスワードを聞かれたら入力する
////////////////////////////////////////////////////
Sleep(1)
dim WId; WId = GETID("ネットワーク パスワードの入力","#32770")
dim ls; ls = 0
ifb WId > -1 then
ls = Login(WId,Id,Pass)
else
ls = TRUE
endif
ifb ls = TRUE then
print "シャットダウンしました。"
endif
////////////////////////////////////////////////////
// IDとPASSを入力する部分だけ引っ張り出した
////////////////////////////////////////////////////
function fncLogin(W,I,P)
TRY
SENDSTR(W,I,1,TRUE)
SENDSTR(W,P,2,TRUE)
KBD(VK_RETURN)
ifb GETID("ネットワーク パスワードの入力","#32770") = -1 then
RESULT = TRUE
else
RESULT = FALSE
endif
EXCEPT
RESULT = FALSE
MSGBOX(TRY_ERRMSG)
ENDTRY
fend
2.TS-H2.0TGL/R5の場合この機種の場合、上のTS-0.3TGL/R5と違い、URLにコマンドを入れる方法ではシャットダウンできません。
また、ページのソースを見てもスクリプトだらけでなんだか良くわからないので、ブラウザでクリックする操作を再現してやるのが良さそうです。
ただ、ご存知のようにIEの操作といっても、UWSC標準の機能で操作を記録してもうまくいきません。
そこで今回は、
IEManipulation.uwsというものを使用させていただきました。
詳しくは
こちらを参照してください。
////////////////////////////////////////////////////
//TS-H2.0TGL/R5をシャットダウンするスクリプト
////////////////////////////////////////////////////
dim Id; Id = "admin"
dim Pass; Pass = "password"
dim TS; TS = "TeraStation2"
call IEManipulation.uws
_ie = IE.new()
IE.show( _ie )
IE.jump( _ie, "http://"+TS )
IE.type( _ie, "txtAuthLoginUser", Id )
IE.type( _ie, "txtAuthLoginPassword", Pass )
IE.click_and_wait( _ie, "btnAuthSubmit" )
IE.click_and_wait( _ie,"divMenuMaintenanceShutdown" )
KBD(VK_TAB)
sleep(1)
KBD(VK_TAB)
sleep(1)
KBD(VK_RETURN)
sleep(1)
KBD(VK_RETURN)
IE.end_manipulation()
3.TS-XH2.0TL/R6の場合こちらも上のスクリプトと同様に
IEManipulation.uwsを使用させていただいてます。
ページの構成が違うのでそれにあわせている所以外殆ど同じです。
実はこれ、作った当初は正常に動作しているように見えたのですが、なぜか突然UWSC内部でエラーが発生するようになり、現在はうまく動作しません。IDとPASS入れてクリックした後でエラーが出るのですが、まだ原因不明です。
もしかしたらUWSCのバージョンを変えたら動くかも知れませんが・・・
原因がわかったら追記したいと思います。
////////////////////////////////////////////////////
//TS-XH2.0TL/R6をシャットダウンするスクリプト
////////////////////////////////////////////////////
dim Id; Id = "admin"
dim Pass; Pass = "password"
dim TS; TS = "TeraStation3"
call IEManipulation.uws
_ie = IE.new()
IE.show( _ie )
IE.jump( _ie, "http://"+TS )
IE.type( _ie, "user", Id )
IE.type( _ie, "password", Pass )
IE.click_and_wait( _ie, "ext-gen17" )
IE.click_and_wait( _ie, "ext-gen548" )
KBD(VK_RETURN)
sleep(1)
KBD(VK_RETURN)
sleep(1)
IE.end_manipulation()
最後にNASをこうやって自動でシャットダウンしたいという需要って無いんですかねぇ?
メーカーがそのくらいのコマンドなりインターフェースなり用意してくれても良いと思うんですけど。
なんで無いんでしょうね???
あと、この記事ですが、アメブロの新エディタ使って書いたら、リストの部分をめちゃくちゃにされました;;
結局、旧タグエディタで書き直しましたよ。トホホ・・・orz