Hatena::ブログ(Diary)

295minのメモ帳

 | 

2017-08-30

AirStation(WAPS-AG300H) のスケジュールリブート

13:57

AirStation がよくおさぼりにならせなるので、スケジュールリブートを仕込んでみる。

reboot.html のソースを見ていたらスケジュールリブートの名残らしき schreboot.html を発見したんだけどどうも動作しないっぽい。

perl で httpアクセス は CSRFトークン 取得が面倒なのでやめて、Windows Script Host(WSH) であたかも人間が操作しているような感じでやってみる。

  • airstation_reboot.vbs

確認ダイアログが出るとスクリプトが止まるっぽいので2段構え。

無線LANIPアドレスを引数で渡してください。

Dim intArgsCount
intArgsCount = Wscript.Arguments.Count

Dim folder
folder = "念のため実行フォルダ指定"

if intArgsCount > 0 Then
	Dim ipaddr
	ipaddr = Wscript.Arguments(0)
	CreateObject("Wscript.Shell").Run folder + "airstation_reboot_ie.vbs " + ipaddr
	WScript.Sleep 100
	CreateObject("Wscript.Shell").Run folder + "airstation_reboot_dialog.vbs"
End If
  • airstation_reboot_ie.vbs

IE操作係

Dim intArgsCount
intArgsCount = Wscript.Arguments.Count


if intArgsCount > 0 Then
'	初期設定
	Dim ipaddr
	ipaddr = Wscript.Arguments(0)

	Dim wsh
	Set wsh = WScript.CreateObject("WScript.Shell")

'	IE初期設定→ページ表示
	Dim myIE
	Set myIE = WScript.CreateObject("InternetExplorer.Application")
	'myIE.Visible = false
	myIE.Visible = true
	myIE.Navigate "http://" + ipaddr + "/reboot.html"
	WScript.Sleep 1000

'	IEをアクティブにしてIP/PASSを入力
	wsh.AppActivate "Internet Explorer"
	wsh.SendKeys "admin"
	wsh.SendKeys "{tab}"
	wsh.SendKeys "password"
	wsh.SendKeys "{enter}"
	WScript.Sleep 500

'	再起動ボタンを探して押してぽちり
	For Each myTag In myIE.document.getElementsByTagName("input")
		If InStr(myTag.outerHTML, "再起動") > 0 Then
			myTag.Click
			Exit For
		End If
	Next
	WScript.Sleep 2000

'	ログアウト(次回に影響がでるため)
	myIE.Navigate "http://" + ipaddr + "/logout.html"
	WScript.Sleep 500

'	IEを閉じる
	myIE.Quit

'	変数解放
	Set myIE = Nothing
	Set wsh = Nothing

End If
  • airstation_reboot_dialog.vbs

確認ダイアログ押す係

Dim wsh
Set wsh = WScript.CreateObject("WScript.Shell")

Dim count

'ダイアログが出るまで待機
count= 0
Do Until (wsh.AppActivate("Web ページからのメッセージ") or count > 30)
	WScript.Sleep 100
	count = count + 1
Loop

If (count <= 30) Then 
'	ダイアログが消えるまでENTER入力
	count= 0
	Do While (wsh.AppActivate("Web ページからのメッセージ") or count < 10)
		wsh.sendkeys "{enter}"
		WScript.Sleep 100
		count = count + 1
	Loop
End If


'ダイアログが出るまで待機
count= 0
Do Until (wsh.AppActivate("Web ページからのメッセージ") or count > 30)
	WScript.Sleep 100
	count = count + 1
Loop

If (count <= 30) Then 
'	ダイアログが消えるまでENTER入力
	count= 0
	Do While (wsh.AppActivate("Web ページからのメッセージ") or count < 10)
		wsh.sendkeys "{enter}"
		WScript.Sleep 100
		count = count + 1
	Loop
End If

Set wsh = Nothing
  • オチ

ワークステーションがロック画面になってるとアクティブ操作できなくてログイン画面で止まってしまいます。

WSH を使ってロック画面解除は出ないようなので今のところだとお手上げ。

トラックバック - http://d.hatena.ne.jp/slim_295min/20170830/1505278671
 |