2011.02.02 · 技術と道具

Windowsのプロセスを監視してRESTするスクリプト

昨日から、はてなダイアリーに技術のチップスを書いたりし始めたのだが、そっちが継続していけるか甚だ怪しかったりもするので、こっちにもダブルポストしておく。

昨日の仕事でそういうことをやっていたのだが、どうやって1日でプロセス監視とRESTでの報告をやろうかと調べ回った結果、JavaScript1本で出来ちゃいましたよという話。

Windowsには標準でWSHというVBScriptとかJavaScript(もといJScript)を解析するスクリプトエンジンが載っている。それでWindowsのプロセスも取れるし、みんながAjaxを使うときに使っているXMLHTTPを使ってRESTを叩くことも出来る。

http://www.monzen.org/blogn/index.php
JAVASCRIPT
var locator = WScript.CreateObject("WbemScripting.SWbemLocator.1");
var service = locator.ConnectServer();
var set = service.ExecQuery("select * from Win32_Process");
while (true) {
  for (var e = new Enumerator(set); !e.atEnd(); e.moveNext()) {
    var p = e.item();
    if (p.Caption == find) {
      //findが実行ファイル名(calc.exe等)
      //該当すればここに書いてあることが実行できる
    }
  }
  WScript.sleep(5000);
}

で、RESTを叩くには、

JAVASCRIPT
var xmlhttp = WScript.createObject('WinHttp.WinHttpRequest.5.1');
//第3引数がfalseなので同期通信、trueなら非同期通信
xmlhttp.open(method, url, false);
xmlhttp.send('id=' + id + '&node[status]=' + status);

ちなみにRESTを受ける口はRuby on Railsのscaffoldなので、methodとurlの組み合わせは以下のようになる。

rails action method url
create POST http://localhost:3000/nodes.xml
update PUT*1 http://localhost:3000/nodes/1.xml
destroy DELETE*2 http://localhost:3000/nodes/1.xml

*1 実際はPOSTして&_method=putというパラメータをつけて送る
*2 実際はPOSTして&_method=delete(ry

こんな感じのJScriptを書いて、.jsで保存する。で、そのファイルをダブルクリックして起動すると画面は表示されずに監視がバックグラウンドで始まる。終了する方法はちょっと残念だがタスクマネージャのプロセスのところから、wscript.exeというのを探して落とすしかない。こういうスクリプトを複数動かしていたら、どうやって目的のものかを探すのかは今後の課題。
WScript.echo()でメッセージを表示しようとすると、ダイアログがポップアップして表示される。コマンドラインから起動すると標準出力に出る。

素晴らしい!

2011/02/02 23:34
← 都民共済の驚異的な対応能力に驚いた
TomcatやGlassfishでWordPressが動く~… →
井上 研一
経済産業省推進資格ITコーディネータとして中小企業のDX・AI活用の現場で伴走支援を行う。「ITCプロセスガイドライン4.0」および「中小企業向けAI活用ガイド」執筆メンバー。著書・講演多数。ITエンジニアとして25年以上の実務経験。AI導入の実務に10年以上携わる。自ら開発したAIサービス「Gen2Go」が北九州発!新商品創出事業の認定を受ける。2026年4月より北九州市立大学大学院マネジメント研究科の学生としての顔も持つ。

本サイトおよびブログに掲載している内容は、特に明記のない限り、井上研一個人の見解に基づくものです。所属・関与する組織、団体、企業、研究会等の公式見解を示すものではありません。