需要帮助将WMI值转换为VBScript变量

问题描述:

我不是程序员,但我试图扩展Bginfo可以通过VBScript从计算机收集的信息量。我有一些工作,但一些WMI查询返回多行值。我想分开这些多个行,以便我可以分开使用它们。下面是我部分地WMIGen创建了一个例子:需要帮助将WMI值转换为VBScript变量

Const wbemFlagReturnImmediately = &h10 
Const wbemFlagForwardOnly  = &h20 

strComputer = "." 


Dim Installed 
Dim Size 


Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2") 
Set colSlots = objWMIService.ExecQuery("SELECT * FROM Win32_PhysicalMemoryArray", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly) 
Set colMem = objWMIService.ExecQuery("SELECT * FROM Win32_PhysicalMemory", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly) 

On Error Resume Next 

For Each objSlot In colSlots 
    TotalSlots = objSlot.MemoryDevices 
Next 

For Each objMem In colMem 
    MemDevices = objMem.DeviceLocator 
    PartNumbers = objMem.PartNumber 
    Size = Round(objMem.Capacity/1073741824) & " GB" 
Next 

On Error Goto 0 

MemDevices,PartNumbers和尺寸都让我结果的多行取决于有多少存储设备也有。我怎样才能得到每条线的价值,并将它们变成变量?这是我在想它的外观:

RAM 1: Size in GB, Part Number, slot number on board. 
RAM 2: Size in GB, Part number, slot number on board 
"" Continue the list for the remaining RAM sticks "" 
+0

能否请您分享'MemDevices','PartNumbers'和'你Size'实际输出的屏幕截图,并输出您期望。我试过了代码,它显示了每个插槽中包含的零件号和尺寸。 – omegastripes

+0

我知道代码没有问题。例如,如果您有4个DIMM,MemDevices查询将返回4行。我想要做的是学习如何将这些行中的每一行变成变量。这样我就可以在Bginfo中分别列出每个插槽的大小,部件号和插槽编号。 – Chris

如果您需要未定义数量的相同类型的变量,您可以在VBScript中使用数组变量。 使用Bginfo实用程序不需要该变量。 您可以生成信息循环:

i = 1 
For Each objMem In colMem 
    MemDevices = objMem.DeviceLocator 
    PartNumbers = objMem.PartNumber 
    Size = Round(objMem.Capacity/1073741824) & " GB" 
    Echo "RAM " & i & " Size: " & Size & " Part Nr. " & PartNumbers 
    i = i + 1 
Next 
+1

@Banfo实用程序的@Ansgar脚本是特殊的。你必须使用“回声”而不是“wscript.echo”。检查[本页](https://www.verboon.info/2012/02/how-to-use-vbscripts-in-bginfo/) – JoSerra

+0

啊,对不起。没有意识到这一点。 –

+0

谢谢,那就是我一直在寻找的!我有另一个相关的问题:假设我只想显示RAM 2的信息,但排除所有其他RAMS。如果我知道至少有两个RAM,但我不知道确切的总数,我将如何显示只有RAM 2? – Chris