40歳からのキャリアチェンジ

20代はエンジニア・PM、30代はWeb系エンジニア向けのキャリアアドバイザー。40代の今はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連あたり

JScript でExping もどき



未読になっていたネットワーク関連のブログを何気なくチェックしていて、ネットワークエンジニアに成るさんのネットワークのリモート監視と操作と現場マンというエントリーで
こういうときはツールに頼ればいい。
ネットワークやっている人なら必ず触ると思われる
Expingでpingを連続で打ち続けていた。
とあって、Expingに頼らないで、JScriptで、書けるかなぁと思ってちょっとチャレンジしてみて、作成約1時間ほどかかったけどできた!

こういう地道な作業に対しては、Windows系ならVBScriptUnix/Linux系ならPerlRubyや最近だとPythonとかになるだろうけど、いづれにしても、1つ得意なのを知っておくと、いざっていうときに、色々と応用がきくかなぁと。

下記がサンプルコードです。(IPアドレス羅列してるから本当はこの部分はテキストファイルとかから読み込ませるようにしたほうが処理的には綺麗だと思うけど、とりあえずということで)

コマンドラインで実行するとこんな感じでループしつづける
192.168.1.2-->NO REPLY RECEIVED
192.168.1.1-->REPLY RECEIVED
192.168.1.2-->NO REPLY RECEIVED
192.168.1.1-->REPLY RECEIVED
192.168.1.2-->NO REPLY RECEIVED
192.168.1.1-->REPLY RECEIVED
192.168.1.2-->NO REPLY RECEIVED
192.168.1.1-->REPLY RECEIVED

ここからソースコード

do {
var h;
h = checkHours();
var IP1="192.168.1.1";
var IP2="192.168.1.2";
exPing(IP1);
exPing(IP2);
/*
ループしつづけるとCPU使用率上がるので
待ってから処理を行う。1000だと1秒
*/

WScript.Sleep (1000);
} while(h
function checkHours() {
var currentTime,currentHours;
currentTime = new Date();
currentHours = currentTime.getHours();
return(currentHours);
}

function exPing(IPAddress) {
var objShell = new ActiveXObject("WScript.Shell");
var objExecObject = objShell.Exec
("%comspec% /c ping -n 1 -w 1000 " + IPAddress);

do {
var strText = objExecObject.StdOut.ReadAll()
/*
search メソッドでPingの実行結果にReplyが含まれるかどうか
確認。一致する文字列が見つらない場合には-1が返るためその数値を
条件判定式で利用
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/script56/html/js56jsmthsearch.asp
*/
var reg = /Reply/i;
if(strText.search(reg)>0) {
WScript.Echo(IPAddress + "-->REPLY RECEIVED");
} else {
WScript.Echo(IPAddress + "-->NO REPLY RECEIVED");
}
} while(!objExecObject.StdOut.AtEndOfStream);
return null;
}

Tags: