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 サービスに接続し、その参照を取得している。
続けて ExecQuery() で Win32_OperatingSystem オブジェクトを取得する。
Dim result Set result = wmi.ExecQuery("SELECT * FROM Win32_OperatingSystem", _ "WQL", _ wbemFlagReturnImmediately + wbemFlagForwardOnly)
ExecQuery の引数には WQL と呼ばれる WMI 用の SQL を指定する。
最後に、取得したオブジェクトからメモリ量を取得して出力する。
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 オブジェクトからはメモリ情報以外も取得できる。