Página 1 de 1

Sumar valores

Publicado: 06 Sep 2010, 20:20
por kemazonico
Que tal, espero me puedan ayudar.

Estoy realizando un proyecto de gestión de actívos y tengo una duda en cuanto a poder sumar la capacidad de la memoria de el equipo.

Código: Seleccionar todo

$strComputer = "."
$objWMIService = ObjGet("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & $strComputer & "\root\cimv2")
$colSMBIOS = $objWMIService.ExecQuery _
    ("Select * from Win32_PhysicalMemory where DeviceLocator like '%XMM%'")
For $objSMBIOS in $colSMBIOS
	ConsoleWrite ("Capacidad: " & $objSMBIOS.Capacity & @CRLF)
Next
Lo anterior me devuelve en la consola lo siguiente:

Código: Seleccionar todo

Capacidad: 2147483648
Capacidad: 2147483648
Estos valores representan la capacidad de memoria por slot y lo que quiero es sumar estos valores para obtener el total de la memoria del sistema.

Se que es algo muy basico, pero no soy programador, pero quiero ir aprendiendo :D
Alguna pista?

Re: Sumar valores

Publicado: 07 Sep 2010, 08:21
por Ximorro
Hombre, pues sí que es básico, deberías empezar a mirarte el manual y haciendo pequeños experimentos. Para no saber ya te metes con WMI, no está mal ;-)

Sumar esos valores es muy fácil, aunque no puedo probarlo porque ese código no me devuelve nada en mi XP ¿? ¿? ¿Sabes por qué puede ser?

Sería añadir esto al bucle For:

Código: Seleccionar todo

$total = 0
For $objSMBIOS in $colSMBIOS
	$total += $objSMBIOS.Capacity
   ConsoleWrite ("Capacidad: " & $objSMBIOS.Capacity & @CRLF)
Next
ConsoleWrite ("Capacidad TOTAL: " & $total & @CRLF)
El ConsoleWrite interior se puede quitar, si sólo quieres ver el resultado final.

En AutoIT hay otra manera "nativa", sin WMI, que a mí sí me funciona, hay una función, MemGetStats(), que devuelve unas cuantas estadísticas sobre la memoria, te hago un programita para sacar todos los valores, el que te interesa creo que es $mem[1]:

Código: Seleccionar todo

Global $sMsg[7] = ["Porcentaje en uso: ", "Total RAM física: ", "RAM física disponible: ", "Total Archivo de Intercambio: ", _
			"Archivo de Intercambio disponible: ", "Total Memoria Virtual: ", "Memoria Virtual disponible: "]
$mem = MemGetStats()
For $i = 0 To 6
	ConsoleWrite($sMsg[$i] & $mem[$i] & @LF)
Next
Vaya, en realidad si sólo quieres la memoria total son dos líneas:

Código: Seleccionar todo

$mem = MemGetStats()
ConsoleWrite("Capacidad TOTAL: " & $mem[1] & @LF)