Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

What would be the preferred way of gathering how much RAM is in each of our 500+ windows (XP and 7) machines with the least amount of effort?

share|improve this question
There's any number of system auditing tools available. – womble Aug 18 '11 at 10:19
Can you list a few? – Jake Aug 18 '11 at 10:21
No, I don't get into that kind of thing any more. Google provideth, though; "windows hardware audit" looks helpful, for a start. – womble Aug 18 '11 at 10:23
I've got to assume any organisation that has 500+ machines already has one of the more popular system management products installed. Tivoli, SCOM, something like that - which could run audits and provide this info. – EightBitTony Aug 18 '11 at 10:35
SCOM would be my guess if you have 500+ PCs – Mark Henderson Aug 18 '11 at 11:22
up vote 1 down vote accepted

I would offer two options:

  1. The Microsoft Assessment and Planning (MAP) Toolkit (free)
  2. System Information for Windows (requires license purchase and scripting; I used this to determine what sticks of RAM (and how many slots) were in about 50 PCs by running it on all system on the network via PSEXEC. Then a simple FIND command of the resulting data told me all I needed to know, clearly.

However, since your question was with least amount of effort, I'd probably say MAP.

share|improve this answer

I gather this information (and a whole lot more) as part of the logon script. Each log (one per machine and one per user) is later parsed and the information stored in a database. The relevant part of the (VBS) script, which I copied from some long forgotten source, is:

'// Memory Info
objHardwareFile.WriteLine "Memory Information:"
objHardwareFile.WriteLine "==================="
For Each objMem In GetObject("winmgmts:{impersonationLevel=impersonate}\\.\root\cimv2").InstancesOf("Win32_PhysicalMemory")
Select Case objMem.MemoryType
    Case 0
        rtype = "Unknown"
    Case 1
        rtype = "Other"
    Case 2
        rtype = "DRAM"
    Case 3
        rtype = "Synchronous DRAM"
    Case 4
        rtype = "Cache DRAM"
    Case 5
        rtype = "EDO"
    Case 6
        rtype = "EDRAM"
    Case 7
        rtype = "VRAM"
    Case 8
        rtype = "SRAM"
    Case 9
        rtype = "RAM"
    Case 10
        rtype = "ROM"
    Case 11
        rtype = "Flash"
    Case 12
        rtype = "EEPROM"
    Case 13
        rtype = "FEPROM"
    Case 14
        rtype = "EPROM"
    Case 15
        rtype = "CDRAM"
    Case 16
        rtype = "3DRAM"
    Case 17
        rtype = "SDRAM"
    Case 18
        rtype = "SGRAM"
    Case 19
        rtype = "RDRAM"
    Case 20
        rtype = "DDR"
End Select
objHardwareFile.WriteLine " Memory Bank: " &  objMem.BankLabel
objHardwareFile.WriteLine " Memory Size: " & objMem.Capacity/1024/1024 & " MB"
objHardwareFile.WriteLine " Memory Speed: " & objMem.Speed & " MHZ"
objHardwareFile.WriteLine " Memory Type: " & rtype
share|improve this answer
That's actually a pretty good (if ghetto) way of doing it (also, nice to see it uses 1024 to a kilo) – Mark Henderson Aug 19 '11 at 6:11

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.