当我在 CMD 提示符下发出以下命令时,将为 AdapterRAM 对象返回正确的值:
WMIC Path Win32_VideoController Get AdapterRAM
返回正确值 8589934592。但是,当我使用带有相同查询的 VBScript 时,同一 AdapterRam 对象返回不正确的值:
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
GPURAMSize = oPC.AdapterRAM
WScript.Echo GPURAMSize
Next
同一 AdapterRAM 对象返回错误值 -1048576。
我在这里遗漏了什么吗?为什么从 CMD 提示符和 VBScript 中使用相同的查询返回的值存在差异?
提前致谢。
最佳答案
感谢所有提供评论的人的帮助,尤其是用户 692942 提供的链接帮助我解决了问题。这是我想出的...
strComputer = "."
Dim VideoController, PosValueBegin, PosValueEnd, Length, StringToFind
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set cSetting = objWMIService.ExecQuery("Select Name, Manufacturer, Model, SystemSKUNumber, TotalPhysicalMemory From Win32_ComputerSystem")
mathConversion = 1024 * 1024 * 1024
Set cSetting = objWMIService.ExecQuery("Select DeviceID, Caption, AdapterRAM From Win32_VideoController Where DeviceID='VideoController1'")
For Each objComputer in cSetting
GPUID = objComputer.Caption
Next
For Each objComputer in cSetting
StringToFind = "AdapterRAM = "
VideoController = objComputer.GetObjectText_(0)
PosValueBegin = InStr(VideoController, StringToFind) + Len(StringToFind)
PosValueEnd = InStr(PosValueBegin, VideoController, ";")
Length = PosValueEnd - PosValueBegin
ActualNumber = Mid(VideoController, PosValueBegin, Length)
GPURAMSize = RoundUp(ActualNumber / mathConversion)
Next
wScript.Echo "GPU: " & GPUID & " (" & GPURAMSize & "GB)"
wScript.Quit
关于cmd - 为什么我在 CMD 和 VBS 之间得到不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72736346/