当我在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返回的值之间存在差异?
提前谢谢。
发布于 2022-06-29 21:14:26
感谢所有提供评论的人的帮助,尤其是用户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
https://stackoverflow.com/questions/72736346
复制相似问题