2017-09-03 47 views
0

我不是程序員,但我試圖擴展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

回答

2

如果您需要未定義數量的相同類型的變量,您可以在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