htaを使ってみる
pingツール
仲間がpingツールを欲しいと言っていました.1時間毎に2,3回チェックして応答なければメールするというもの.windowsで動くものと言われたのでぐぐってみようとしたけど,車輪の再発明をしてみることにしました.使ってみたのはhtaです.ファイル名を「ほげ.hta」としてダブルクリックすれば動きます.今日はちょっと疲れたので説明は手抜きです.すんません.
pingをExec
pingをWScript.Shellの中からExecで動かしてそのstdoutを使って死活チェックをします.ExecするとDOS窓が出てくるので格好悪いです.jqueryを使っているのは単なる興味.htaの中からjavascriptが呼べるのかどうかを試していました.パケットロスが0%だったらalive,100%だったらnot responding,それ以外だったらsomething wrongとalertします.
<html> <head> <title>sample</title> <script src="jquery.js"></script> <script type="text/javascript"> var wsh = new ActiveXObject("WScript.Shell"); $(function(){window.resizeTo( 300,200) }); function do_ping() { var target = $("#ipaddr").val(); var cmd = "ping -n 2 -w 20 " + target; var ret = wsh.Exec(cmd); var out = ret.Stdout.ReadAll(); out.match(/\((\d+)%/m); switch (RegExp.$1){ case '0': alert( target + " is alive"); break; case '100': alert ( target + " is not responding"); break; default: alert ( target + " is something wrong"); } } </script> </head> <body> <form> <input type="text" name="ipaddr" id="ipaddr" value="127.0.0.1"/> <input type="button" value="ping" onClick="do_ping()"/> </form> </body>
wmiを使う
DOS窓が出てくるのがあまりにもいけてなかったので,wmiを使ってみることにしました.WQLの中でIPアドレスをシングル(ダブル)クォーテーションでかこってやる必要があるのに気がつかなくて,作るのにえらく時間をくいました.でもできあがってみると簡単.
<html> <head> <title>ping sample</title> <script src="jquery.js"></script> <script type="text/javascript"> var wsh = new ActiveXObject("WScript.Shell"); $(function(){window.resizeTo( 300,200) }); function do_ping() { var target = $("#ipaddr").val(); var wmi = GetObject("winmgmts:\\\\.\\root\\CIMV2"); var cols = wmi.ExecQuery( "Select * from Win32_PingStatus Where Address = '" + target + "'" ); var items = new Enumerator(cols); var item = items.item(); if (item.StatusCode == 0){ alert( target + " alive" ); } else { alert( taret + " not responding"); } } </script> </head> <body> <form> <input type="text" name="ipaddr" id="ipaddr" value="127.0.0.1"/> <input type="button" value="ping" onClick="do_ping()"/> </form> </body>
うい〜
づかれた・・・