🚀 Introduction
Ever wondered how to programmatically access your Windows system’s performance ratings — like CPU, RAM, disk, and graphics scores — without opening any fancy GUI tools?
Welcome to the world of PowerShell + CIM + WinSAT.
In today’s deep dive, we’ll explore how to use the Get-CimInstance
cmdlet with the Win32_WinSAT
class to pull out your system’s Windows Experience Index (WEI) — those hidden benchmark scores from Windows Assessment Tools.
🔍 Perfect for power users, sysadmins, or devs who want to monitor system capabilities, automate performance checks, or script hardware audits.
Let’s get right into it — step by step.
🧱 Step 1: Using Get-CimInstance
to Query WinSAT
Here’s the foundational PowerShell snippet to retrieve performance data:
Get-CimInstance -ClassName Win32_WinSAT
🧠 What’s Happening Here?
Get-CimInstance
: Modern, lightweight version ofGet-WmiObject
, designed for remote compatibility and better performance.Win32_WinSAT
: A WMI class that stores the Windows System Assessment Tool scores.- This returns an object containing system scores like:
CPUScore
MemoryScore
GraphicsScore
DiskScore
WinSPRLevel
(the base score)
It’s a single line, but it unlocks a treasure chest of performance metrics.
🔍 Step 2: Store It in a Variable for Easy Access
To make it easier to work with, let’s store the results in a variable:
$winsat = Get-CimInstance -ClassName Win32_WinSAT
🛠️ Why Use a Variable?
- Cleaner syntax when accessing individual properties.
- Great for scripting/reporting.
- Makes it easy to reuse the data across your script.
Try running:
$winsat.CPUScore
You’ll get your system’s CPU score, typically ranging from 1.0 to 9.9.
🧾 Step 3: Display All Scores in a Friendly Format
Now, let’s prettify the output:
"CPU Score : $($winsat.CPUScore)"
"Memory Score : $($winsat.MemoryScore)"
"Graphics Score : $($winsat.GraphicsScore)"
"Disk Score : $($winsat.DiskScore)"
"Base Score : $($winsat.WinSPRLevel)"
🎯 Explanation:
$(...)
: Ensures proper evaluation of property values inside double quotes.- This gives a readable, one-glance summary of your system's performance.
📊 Step 4: Use Conditional Logic (Optional Bonus)
Want to script some logic based on your scores? Try something like this:
if ($winsat.DiskScore -lt 5) {
Write-Host "Warning: Disk performance is below recommended levels!" -ForegroundColor Red
}
🔐 Real-World Use Case:
Automated hardware checks in deployment scripts or performance alerts in testing environments.
🧠 What is WinSAT and Why Does It Matter?
The Windows System Assessment Tool (WinSAT) is a benchmarking utility built into Windows that evaluates various hardware components. Even though Microsoft stopped showing these scores in the GUI (after Windows 8.1), the data still exists and is accessible via WMI/CIM.
If you're building automation tools or desktop performance dashboards, this is gold.
✅ Friendly Reminder
Once you've followed the snippets above, feel free to combine them into a single script for reuse. You can wrap it in a function, export it to a report, or even integrate it into a deployment pipeline!
💡 Pro Tips & Best Practices
- Always use
Get-CimInstance
instead ofGet-WmiObject
for modern scripting. - Don’t rely on these scores alone for in-depth benchmarks — use them as quick indicators.
- Use
Format-Table
orOut-GridView
to visualize multiple systems at once. - Want automation? Hook this into a scheduled task that logs scores periodically.
🏁 Conclusion
Whether you're an IT pro checking performance baselines, a dev building automated tools, or a curious geek like us — tapping into Win32_WinSAT
with PowerShell is a slick trick to have in your arsenal.
Got questions or want us to show how to log these to CSV or pull it remotely via PowerShell remoting?
👇 Drop a comment and let us know!
0 Comments