ひっさびさにVBScriptなんぞを書いてインベントリの真似事的なものを作成している。
知りたいのは、だいたい以下の感じ。
・メモリスロットの総本数
・メモリ搭載容量
・ メモリ種類
スクリプト的にはこんなところか。
Set objWMI = GetObject("winmgmts:\\.\root\CIMV2") aryForm = Array("Unknown","Other","SIP","DIP","ZIP","SOJ","Proprietary","SIMM", _ "DIMM","TSOP","PGA","RIMM","SODIMM","SRIMM","SMD","SSMP", _ "QFP","TQFP","SOIC","LCC","PLCC","BGA","FPBGA","LGA") aryType = Array("Unknown","Other","DRAM","Sync-DRAM","Cache-DRAM","EDO","EDRAM","VRAM", _ "SRAM","RAM","ROM","Flash","EEPROM","FEPROM","EPROM","CDRAM", _ "3DRAM","SDRAM","SGRAM","RDRAM","DDR","DDR2") ' ----------------------------------------- Set colItems = objWMI.ExecQuery("SELECT * FROM Win32_ComputerSystem") For Each objItem in colItems strResult = strResult & "SystemName: " & objItem.Name & vbCr strResult = strResult & "SystemManufacturer: " & objItem.Manufacturer & vbCr strResult = strResult & "SystemModel: " & objItem.Model & vbCr strResult = strResult & "TotalMemory: " & objItem.TotalPhysicalMemory & " bytes" & vbCr Next Set colItems = objWMI.ExecQuery("SELECT * FROM Win32_PhysicalMemoryArray") For Each objItem in colItems strResult = strResult & "MemorySlot: " & objItem.MemoryDevices & vbCr Next Set colItems = objWMI.ExecQuery("SELECT * FROM Win32_PhysicalMemory") For Each objItem in colItems strResult = strResult & "----- " & aryForm(objItem.FormFactor) & " Module (" & _ aryType(objItem.MemoryType) & ") on " & objItem.DeviceLocator & vbCr strResult = strResult & "Tag: " & objItem.Tag & vbCr strResult = strResult & "DataWidth: " & objItem.DataWidth & " bit" & vbCr strResult = strResult & "MemoryCapacity: " & objItem.Capacity & " bytes" & vbCr strResult = strResult & "Speed: " & objItem.Speed & "MHz" & vbCr Next WScript.Echo strResult
Option Explicitしていないので汚いもんだけど。
結果は下記のとおり。
で、Moduleの後ろのカッコ内がMemoryTypeから拾ったデータなんだが、
なぜか0(=Unknown)になってしまう。
MSDNのライブラリを確認すると、DDR3がない。
「じゃあDDR3なんじゃね?」としたいところだが、
このPC、DDR2なんだよね。本来21が返らないといかん。
謎。
だが、大勢に影響なさそうなのでこれで通す感じ。