怠日記

写真・金魚・昆虫・プログラミングの趣味を語るサイトです。似たようなことをnoteにも書いたり書いてなかったり。

VBScript - スクリプトが使用しているメモリ量を取得する

WMI サービスを使ってスクリプトが使用しているメモリ量を取得できる。

サンプルスクリプト

次のスクリプトは、スクリプト(を実行している cscript.exe)のプロセスID、使用メモリ量、コマンドラインを表示する。

'検索するプロセス名
Dim processNameToSearch
processNameToSearch = "cscript.exe"
'WMIサービスを取得
Dim wmi
Set wmi = GetObject("winmgmts:\\.\Root\CIMV2")
'プロセス名で Win32_Process を検索
Dim result
Set result = wmi.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '" & processNameToSearch & "'")
'検索結果を出力
Dim tmp
For Each tmp in result
    'プロセスID
    WScript.Echo "Process ID: " & tmp.ProcessId
    'プロセスが使用している物理メモリ量(バイト)
    WScript.Echo "Memory Usage: " & tmp.WorkingSetSize & " bytes"
    'コマンドライン
    WScript.Echo "CommandLine: " & tmp.CommandLine
Next

サンプルスクリプトの説明

まず GetObject 関数を使って WMI サービスへの参照を取得する。

Dim wmi
Set wmi = GetObject("winmgmts:\\.\Root\CIMV2")

関数の引数は WMI サービスへの接続文字列。

接続文字列は winmgmts:\\〈コンピューター名〉\〈WMI 名前空間 の形式で指定する。

  • winmgmts:\\: WMI サービスへの接続を表す文字列(固定)

  • 〈コンピューター名〉: 接続先のコンピューター名
    ローカルを指定するときは . にする。

  • 〈WMI 名前空間: 接続先の WMI 名前空間

今回はローカルコンピューターの WMI サービスに接続し、その参照を取得している。


続けて ExecQuery() で Win32_Process オブジェクトを取得する。
プロセス名が検索条件。

Dim result
Set result = wmi.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '" & processNameToSearch & "'")

ExecQuery の引数には WQL と呼ばれる WMI 用の SQL を指定する。


最後に、検索結果を表示する。

  • ProcessId: プロセスID
  • WorkingSetSize: 使用メモリ量(バイト単位)
  • CommandLine: コマンドライン
Dim tmp
For Each tmp in result
    'プロセスID
    WScript.Echo "Process ID: " & tmp.ProcessId
    'プロセスが使用している物理メモリ量(バイト)
    WScript.Echo "Memory Usage: " & tmp.WorkingSetSize & " bytes"
    'コマンドライン
    WScript.Echo "CommandLine: " & tmp.CommandLine
Next

Win32_Process オブジェクトから取得できる項目はヘルプを参照のこと。

Win32_Process クラス - Win32 apps | Microsoft Learn