PDA

Ver la Versión Completa : Sumar y no concatenar



LiMaX
27/02/2009, 10:12
[Only registered and activated users can see links]

Tengo a guan problem con un código en vbs... que seguro que es una tontada y no lo veo... me explico.

Tengo el siguiente script que me reporta un ficherito con el nombre de la máquina, el usuario, la marca, el modelo, el nº de serie, el procesador, la ram y "el disco duro".

"El disco duro" está así entrecomillado porque es lo que me falla. Si solamente hay un disco duro o una partición no falla pero, si hay más de una, se agilipolla y en vez de sumarme los valores (si, quiero la capacidad total de almacenamiento) me concatena los valores (me los pone seguidos). Es decir, que en vez de sumarme 20 + 30 y darme 50 me da "2030" (solo que en bytes) :mad:

Aquí va el código para que lo estudiéis y aclaro que la variable es strDISC



Dim objWMI : Set objWMI = GetObject("winmgmts:")
Dim colSettingsComp : Set colSettings = objWMI.ExecQuery("Select * from Win32_ComputerSystem")
Dim colSettingsBios : Set colSettingsBios = objWMI.ExecQuery("Select * from Win32_BIOS")
Dim colSettingsProc : Set colSettingsProc = objWMI.ExecQuery("Select * from Win32_Processor")
Dim colSettingsDISC : Set colSettingsDISC = objWMI.ExecQuery("Select * from Win32_DiskDrive")
Dim colSettingsRAM : Set colSettings = objWMI.ExecQuery("Select * from Win32_ComputerSystem")
Dim objComputer, strModel, strSerial, strProcessor, strRAM, strDISC
For Each objComputer in colSettings
strModel = objComputer.Model
Next
For Each objComputer in colSettingsBios
strSerial = objComputer.SerialNumber
Next
For Each objComputer in colSettings
strManu = objComputer.Manufacturer
Next
For Each objComputer in colSettingsProc
strProcessor = objComputer.Name
Next
For Each objComputer in colSettingsDISC
strDISC = strDISC + objComputer.Size
Next
For Each objComputer in colSettings
strRAM = objComputer.TotalPhysicalMemory
Next
Dim objFSO, objFolder, objShell, objTextFile, objFile
Dim strDirectory, strFile, strText
Set ejecuta=wscript.createobject("wscript.shell")
usuario=ejecuta.ExpandEnvironmentStrings("%Username%")
machine=ejecuta.ExpandEnvironmentStrings("%Computername%")
strDirectory = "C:\"
strFile = machine & "_" & usuario & ".txt"
strText = ""

Set objFSO = CreateObject("Scripting.FileSystemObject")

' OpenTextFile Method needs a Const value
' ForAppending = 8 ForReading = 1, ForWriting = 2
Const ForAppending = 2

Set objTextFile = objFSO.OpenTextFile _
(strDirectory & strFile, ForAppending, True)

objTextFile.WriteLine(usuario & "*" & machine & "*" & strManu & "*" & strModel & "*" & strSerial & "*" & strProcessor & "*" & strRAM & "*" & strDISC)
objTextFile.Close
Gracias de antemano por la ayuda ;)

LiMaX
02/03/2009, 11:57
Al informarme un poco más cobre la clase de valores que recibo del WMI vi que el valor está en unit16 y el vbs lo entiende como string, así que lo he solucionado con una variable auxiliar que pasa a numérico el valor y otra que los suma


For Each objComputer in colSettingsDISC
strDISC = objComputer.Size
aux = CDbl(strDISC)
intDISC = intDISC + aux
Next