How to Check Your RAM Model Using PowerShell
Knowing exactly what RAM is installed in your PC isn't just trivia — it matters when you're troubleshooting performance issues, planning an upgrade, or verifying that newly installed memory is recognized correctly. PowerShell gives you direct access to detailed hardware information without needing to open your case or install third-party software. Here's how to use it effectively.
Why Use PowerShell to Check RAM?
Windows has several ways to view memory information — Task Manager shows total RAM, and System Information provides a basic overview — but neither gives you the model-level detail that PowerShell can pull. Through PowerShell, you can query Windows Management Instrumentation (WMI) or Common Information Model (CIM) data to retrieve specifics like manufacturer, part number, speed, capacity per stick, and memory type. That's the level of detail you actually need when shopping for compatible upgrades or diagnosing issues.
The Basic PowerShell Command to Check RAM Details 🖥️
Open PowerShell as a standard user (no administrator privileges required for this query) and run:
Get-CimInstance -ClassName Win32_PhysicalMemory | Select-Object Manufacturer, PartNumber, Speed, Capacity, MemoryType, SMBIOSMemoryType, BankLabel, DeviceLocator This returns a row for each physical RAM stick installed in your system.
What Each Field Means
| Field | What It Tells You |
|---|---|
| Manufacturer | The brand (e.g., Samsung, Micron, SK Hynix) |
| PartNumber | The specific model or SKU identifier |
| Speed | Rated speed in MHz (e.g., 3200, 4800) |
| Capacity | Size of that stick in bytes (divide by 1073741824 for GB) |
| SMBIOSMemoryType | Numeric code for memory generation (DDR4, DDR5, etc.) |
| BankLabel | Which memory bank the stick occupies |
| DeviceLocator | The physical slot label (e.g., DIMM_A1) |
Converting Capacity to Gigabytes
The raw Capacity value comes back in bytes, which isn't intuitive. A cleaner command that does the conversion automatically:
Get-CimInstance -ClassName Win32_PhysicalMemory | Select-Object Manufacturer, PartNumber, Speed, @{Name="CapacityGB"; Expression={$_.Capacity / 1GB}}, BankLabel This adds a calculated CapacityGB column that displays values like 8, 16, or 32 directly.
Decoding the Memory Type Number
The SMBIOSMemoryType field returns a number rather than a name. The most common values you'll encounter:
| Code | Memory Type |
|---|---|
| 24 | DDR3 |
| 26 | DDR4 |
| 34 | DDR5 |
| 20 | DDR (original) |
If you see 0 or 2, the system firmware reported unknown or unspecified — this occasionally happens on older machines or virtual environments.
An Alternative: Using the Older WMI Method
Some environments or older Windows versions respond better to the Get-WmiObject approach:
Get-WmiObject -Class Win32_PhysicalMemory | Select-Object Manufacturer, PartNumber, Speed, Capacity The output is functionally the same. Microsoft has been moving toward Get-CimInstance as the preferred method since PowerShell 3.0, so use Get-CimInstance on any reasonably current Windows 10 or Windows 11 system.
What the Part Number Actually Tells You 🔍
The PartNumber field is the most useful piece of data if you're planning an upgrade. It's the specific model identifier the manufacturer uses — something like M471A1G44AB0-CWE for a Samsung module or CT16G4SFD832A for a Crucial stick. With that string, you can:
- Look up the exact spec sheet on the manufacturer's website
- Confirm whether the stick is ECC or non-ECC
- Verify the exact clock speed and latency timings (like CL22 or CL16)
- Find a compatible match if you're adding a second stick
Keep in mind that part numbers pulled via PowerShell reflect what's stored in the module's SPD (Serial Presence Detect) chip — the small EEPROM on each RAM stick that stores its identity data. Occasionally, especially on prebuilt systems, this data is generic or incomplete.
Factors That Affect What You'll See
The output you get from these commands varies based on several real-world conditions:
System type matters. Desktop machines with standard DIMM slots almost always return complete data. Laptops using SO-DIMMs frequently return the same quality data, but some budget or older models have sparse SPD information.
Soldered RAM is a different story. Many modern ultrabooks and compact desktops (especially those using LPDDR4 or LPDDR5) have RAM soldered directly to the motherboard. PowerShell may still report the capacity and speed, but the manufacturer and part number fields are often blank or generic because there's no standard SPD chip to query.
Virtual machines. If you're running PowerShell inside a VM (Hyper-V, VMware, VirtualBox), the memory information reported reflects what the hypervisor presents — not the physical RAM of the host machine.
Firmware and BIOS implementation. How thoroughly a system's firmware populates SMBIOS data varies by manufacturer. Some enterprise-grade machines from Dell, HP, or Lenovo populate every field meticulously. Others, particularly budget systems or white-label builds, leave several fields empty.
Checking Total RAM vs. Per-Stick Detail
If you only need the total installed RAM rather than per-module detail, a simpler query works:
(Get-CimInstance -ClassName Win32_ComputerSystem).TotalPhysicalMemory / 1GB This returns a single number — the total physical memory your OS sees. It's useful as a quick sanity check after an upgrade.
For the number of slots available versus slots used:
Get-CimInstance -ClassName Win32_PhysicalMemoryArray | Select-Object MemoryDevices, MaxCapacity MemoryDevices shows the total number of slots on your motherboard; cross-referencing this with the per-stick output tells you how many slots are currently populated and how many are free.
What You Do With This Information
Once you have your RAM's manufacturer, part number, speed, type, and slot layout, you're working with real data rather than guesses. Whether that leads you toward adding a matching stick to run in dual-channel, replacing a slow module, diagnosing instability, or confirming your system meets a software requirement — the right next step depends entirely on your specific setup, what the query results show, and what problem you're actually trying to solve.