タスクマネージャのデータが欲しい。

タスクマネージャで普段は
イメージ名(プロセス名)
メモリ使用量(キロバイト表示)
メモリデルタ(キロバイト表示)
仮想メモリ(実際にはPageFileの使用量)
ハンドル数
スレッド数
を意識してみているのだが、これを毎日朝7時に!、とか、定期的に取りたいとする。
タスクマネージャを出してメモ帳に記録していく、とか、やってられんので
取得する方法を考えてみた。


var args = WScript.Arguments;

var service = Connect();
var set = service.ExecQuery("select * from Win32_Process");
for(var e = new Enumerator(set); !e.atEnd(); e.moveNext()){
var p = e.item();
if(p.Caption == args(0))
show(p);
}

function Connect()
{
var locator = WScript.CreateObject("WbemScripting.SWbemLocator.1");
return locator.ConnectServer();
}

function show(p)
{
var name = p.Caption;
var pid = p.ProcessId;
var mem = p.WorkingSetSize/1024;
var vmem = p.PageFileUsage/1024;
var falt = p.PageFaults;
var h = p.HandleCount;
var th = p.ThreadCount;

var str = pid + "\t" + name + "\t" + mem + "\t" + vmem + "\t" + falt + "\t" + h + "\t" + th;
WScript.Echo(str);
}

上記をps.jsとか名前をつけて保存して、引数にプロセス名を取って、こういう風に使う

c:\>CScript ps.js notepad.exe
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

5824 notepad.exe 820 2484 2583 81 1
3080 notepad.exe 3544 2376 1495 75 1

表示は左から順に、プロセスID、プロセス名、メモリ使用量、仮想メモリページフォルト、ハンドル数、スレッド数。
これを適当にタスクスケジューラなんかに登録しておけば、定期的に値が取れる。
Microsoft (R)とかの表示が邪魔な場合は//nologoをつける

c:\>CScript ps.js notepad.exe //nologo
5824 notepad.exe 820 2484 2583 81 1
3080 notepad.exe 3544 2376 1495 75 1