2017-09-03 1 views
0

Je ne suis pas programmeur, mais j'essaie d'augmenter la quantité d'informations que Bginfo peut collecter à partir d'un ordinateur en utilisant VBScripts. Certaines d'entre elles fonctionnent, mais certaines requêtes WMI renvoient plusieurs lignes de valeurs. Je voudrais diviser ces lignes multiples afin que je puisse les utiliser séparément. Voici un exemple que je partiellement créé à partir WMIGen:Besoin d'aide pour convertir des valeurs WMI en variables 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, Numéros de pièces, et la taille de tous me donne plusieurs lignes de résultats en fonction du nombre de ces appareils, la mémoire sont. Comment puis-je obtenir la valeur pour chaque ligne individuellement et les transformer en variables? Voici ce que je pensais à la façon dont il regarderait:

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

Pourriez-vous s'il vous plaît partager une capture d'écran avec 'MemDevices',' 'PartNumbers' et size' sortie réelle pour vous, et la sortie que vous attendez. J'ai essayé le code, et il montre exactement ce qui est dans chaque emplacement, y compris le numéro de pièce et la taille. – omegastripes

+0

Je sais qu'il n'y a rien de mal avec le code. Par exemple, si vous avez 4 DIMMS, la requête MemDevices renvoie 4 lignes. Ce que je veux faire, c'est apprendre à transformer chacune de ces lignes en variables. De cette façon, je peux lister chaque slot séparément dans Bginfo avec sa taille, son numéro de pièce et son numéro de slot. – Chris

Répondre

2

Si vous avez besoin d'un nombre indéfini de variables de même type, vous pouvez utiliser une variable de tableau dans VBScript. Pour l'utilisation avec l'utilitaire Bginfo n'est pas nécessaire cette variable. Vous pouvez générer des informations sur la boucle:

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

Les scripts @Ansgar pour l'utilitaire Bginfo sont spéciaux. Vous devez utiliser la phrase "echo" à la place "wscript.echo". Vérifiez [cette page] (https://www.verboon.info/2012/02/how-to-use-vbscripts-in-bginfo/) – JoSerra

+0

Ah, désolé. Je n'étais pas au courant de ça. –

+0

Merci, c'est ce que je cherchais! Une autre question connexe que j'ai: Disons que je voulais seulement afficher les informations pour la RAM 2, mais exclure tous les autres RAMS. Si je sais qu'il y a au moins deux RAMS, mais je ne connais pas le nombre total exact, comment pourrais-je afficher seulement la RAM 2? – Chris