You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMD运行WMIC与VBScript查询AdapterRAM返回值不一致原因

问题原因

不存在配置遗漏,两个环境返回结果不一致是底层机制差异导致的:

  • Win32_VideoController的AdapterRAM属性本身是*无符号64位整数(uint64)*类型,VBScript的Variant原生类型不支持直接解析uint64值。当显存大小超过32位有符号整数上限(2147483647,即2GB)时,直接读取属性会出现数值截断、符号位识别错误,最终输出异常负数。而WMIC工具内部专门做了uint64类型的转换适配,所以可以正常返回大数值。
  • 如果你用32位脚本宿主(C:\Windows\SysWOW64路径下的wscript.exe/cscript.exe)运行脚本,WMI的32位兼容层本身对4GB以上显存的读取存在已知截断bug,会进一步导致返回值错乱,你拿到的-1048576就是数值高位被截断、符号位误判后的典型错误结果。
修复方案
  • 优先用64位脚本宿主运行:调用C:\Windows\System32路径下的cscript.exe或wscript.exe执行脚本,64位环境对大整数的兼容性更好,多数场景下可直接返回正确值。
  • 手动解析原始属性值:如果需要兼容32位环境,不要直接读取oPC.AdapterRAM,通过WMI属性接口拿到原始字节数组,按小端序手动计算真实显存值,可完全规避类型兼容问题,参考代码如下:
sPC = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sPC & "\root\cimv2")
Set cSettings = objWMIService.ExecQuery("Select AdapterRAM From Win32_VideoController Where DeviceID='VideoController1'")
For Each oPC in cSettings
    ' 获取uint64类型的原始字节数据
    ramBytes = oPC.Properties_("AdapterRAM").Value
    ' 按小端序累加计算64位无符号数值,用CDbl避免溢出
    GPURAMSize = CDbl(ramBytes(0)) + CDbl(ramBytes(1))*256 + CDbl(ramBytes(2))*65536 + CDbl(ramBytes(3))*16777216 _
        + CDbl(ramBytes(4))*4294967296 + CDbl(ramBytes(5))*1099511627776# + CDbl(ramBytes(6))*281474976710656# + CDbl(ramBytes(7))*72057594037927936#
    WScript.Echo GPURAMSize
Next

运行后就能得到和WMIC一致的8589934592结果。

内容的提问来源于stack exchange,提问作者user3208239

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 02:01:03