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>

うい〜

づかれた・・・