怠日記

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

VBScript - システムのメモリ情報を取得する

WMI サービスを使って Win32_OperatingSystem より OS の状態を取得できる。

サンプルスクリプト

次のスクリプトは OS が使用できる物理メモリ量、現在の空き物理メモリ量を表示する。

'WbemFlagEnum 列挙
Const wbemFlagReturnImmediately = 16  '0x10
Const wbemFlagForwardOnly = 32        '0x20
'WMIサービスを取得
Dim wmi
Set wmi = GetObject("winmgmts:\\.\Root\CIMV2")
'Win32_OperatingSystemオブジェクトを取得
Dim result
Set result = wmi.ExecQuery("SELECT * FROM Win32_OperatingSystem", _
                           "WQL", _
                           wbemFlagReturnImmediately + wbemFlagForwardOnly)
Dim tmp
For Each tmp In result
    'OSが使用できる物理メモリ量(KB)
    WScript.Echo "Total Visible Memory: " & tmp.TotalVisibleMemorySize & " KB"
    '現在の空き物理メモリ量(KB)
    WScript.Echo "Free Physical Memory: " & tmp.FreePhysicalMemory & " KB"
Next

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

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

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

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

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

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

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

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

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


続けて ExecQuery() で Win32_OperatingSystem オブジェクトを取得する。

Dim result
Set result = wmi.ExecQuery("SELECT * FROM Win32_OperatingSystem", _
                           "WQL", _
                           wbemFlagReturnImmediately + wbemFlagForwardOnly)

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


最後に、取得したオブジェクトからメモリ量を取得して出力する。

  • TotalVisibleMemorySize: OS が使用できる物理メモリ量(キロバイト単位)

  • FreePhysicalMemory: 現在の空き物理メモリ量(キロバイト単位)

Dim tmp
For Each tmp In result
    'OSが使用できる物理メモリ量(KB)
    WScript.Echo "Total Visible Memory: " & tmp.TotalVisibleMemorySize & " KB"
    '現在の空き物理メモリ量(KB)
    WScript.Echo "Free Physical Memory: " & tmp.FreePhysicalMemory & " KB"
Next

Win32_OperatingSystem オブジェクトからはメモリ情報以外も取得できる。