SCCM hardware inventory collects detailed information about hardware components across all managed devices — CPU, RAM, disk, graphics card, BIOS version and more. This guide covers how to extend the default hardware inventory with custom WMI classes and how to create custom inventory reports in 2026.
Understanding SCCM Hardware Inventory
SCCM hardware inventory uses WMI (Windows Management Instrumentation) to collect data from client machines. The collected data is stored in the SCCM database and can be queried for reports, collections and compliance rules. By default SCCM collects approximately 50 WMI classes — but you can add custom classes to collect any WMI data available on your clients.
Enable Additional Hardware Inventory Classes
- In the SCCM console go to Administration → Client Settings
- Open your default or custom client settings
- Go to Hardware Inventory
- Click Set Classes
- Browse the list of available WMI classes and enable the ones you need
- Common useful classes to enable:
- Win32_VideoController — GPU details
- Win32_Battery — laptop battery status
- Win32_TPM — TPM chip details
- SMS_Firmware — UEFI/BIOS details
- Win32_NetworkAdapter — network adapter details
Add a Custom WMI Class to Hardware Inventory
- In Client Settings → Hardware Inventory → Set Classes click Add
- Click Connect and enter a machine name that has the WMI class you want to inventory
- Browse the WMI namespace (default is rootcimv2) and find your class
- Select the class and the properties you want to collect
- Click OK
Query Hardware Inventory Data via PowerShell
# Query hardware inventory data from SCCM via WMI
# Run on SCCM site server
# Get all computers with less than 8GB RAM
Get-WmiObject -Namespace "root\SMS\site_XXX" -Query "SELECT Name, TotalPhysicalMemory FROM SMS_G_System_COMPUTER_SYSTEM WHERE TotalPhysicalMemory < 8589934592" |
Select-Object Name, @{N="RAM_GB";E={[math]::Round($_.TotalPhysicalMemory/1GB,1)}}
# Get all computers with a specific CPU
Get-WmiObject -Namespace "root\SMS\site_XXX" -Query "SELECT Name, Name0 FROM SMS_G_System_PROCESSOR WHERE Name0 LIKE '%i7%'" |
Select-Object Name, Name0
Force Hardware Inventory on a Client
# Force hardware inventory cycle on local machine
Invoke-WmiMethod -Namespace rootccm -Class SMS_Client -Name TriggerSchedule -ArgumentList "{00000000-0000-0000-0000-000000000001}"
# Force on a remote machine
Invoke-Command -ComputerName PC001 -ScriptBlock {
Invoke-WmiMethod -Namespace rootccm -Class SMS_Client -Name TriggerSchedule -ArgumentList "{00000000-0000-0000-0000-000000000001}"
}
Create a Collection Based on Hardware Inventory
Hardware inventory data can be used to create dynamic device collections. For example, create a collection of all machines with less than 8GB RAM for a RAM upgrade project:
-- WQL query for SCCM collection - computers with less than 8GB RAM
select SMS_R_SYSTEM.ResourceID, SMS_R_SYSTEM.ResourceType, SMS_R_SYSTEM.Name, SMS_R_SYSTEM.SMSUniqueIdentifier, SMS_R_SYSTEM.ResourceDomainORWorkgroup, SMS_R_SYSTEM.Client
from SMS_R_System
inner join SMS_G_System_X86_PC_MEMORY on SMS_G_System_X86_PC_MEMORY.ResourceID = SMS_R_System.ResourceId
where SMS_G_System_X86_PC_MEMORY.TotalPhysicalMemory < 8000000