A portable Windows health dashboard that scans the local PC and reports a 0-100 score for the system overall and for each of seven components — with the measured evidence behind every number.
One executable. No installer, no runtime prerequisite, no account, no cloud, no telemetry.
Grab SystemHealthCenter.exe from the
latest release, drop it
anywhere (C:\Tools\ works nicely) and double-click it. Nothing is installed and nothing is
written next to the executable, so it also runs from a USB stick.
Requires Windows 10 (1607+) or Windows 11, x64. Administrator rights are not required.
Real measurements only. Every score is computed from data actually read from the machine.
Anything Windows or the hardware will not report is shown as Not available — never as 0, never
estimated, never invented. The IPv4 address in the screenshot above reads "redacted" because it
was masked before publishing, not because the app hides it.
Every score explains itself. No number is shown without the findings behind it. Each finding states what was measured, how many points it cost, and what to do about it:
Health and performance are separate. Storage carries two independent scores per drive. A drive can sit at 99% rated endurance and still be slow (nearly full, TRIM off, saturated queue), and a fast drive can be days from failure. Collapsing the two would hide exactly the case that matters.
Missing hardware is not a penalty. Component weights are normalised across whichever components were actually measurable. A desktop with no battery has the remaining 95 points of weight rescaled back to 100 — it is never marked down for hardware it does not have, and neither is a machine where a sensor refused to answer.
Offline by default. Nothing leaves the machine. Internet reachability and DNS testing are opt-in in Settings, and even then only an ICMP echo and one DNS query are sent — never any system information.
Unelevated by design. The manifest requests asInvoker. The few diagnostics Windows reserves
for administrators (raw SMART tables, TPM version, BitLocker state) are collected on demand by a
short-lived elevated child process, and only when you click Unlock full hardware data.
| Page | What it gives you |
|---|---|
| Dashboard | Animated overall gauge, seven component cards with key metrics, top problems, recommendations, 7-day trend |
| Health Center | Every finding in priority order (CRITICAL / WARNING / INFO); selecting one jumps straight to its component |
| Components | Per-component detail — metrics, findings, what could not be measured, full inventory; per-drive SMART tables and the storage benchmark |
| System Information | Computer, CPU, RAM modules, motherboard, firmware, GPUs, drives, adapters, OS, security, battery, displays |
| Live Monitor | 1/2/5/10-second sampling of CPU, RAM, GPU, disk and network with live traces |
| Health History | Local 24-hour, 7-day and 30-day score trends per component, with change deltas |
| Reports | HTML (printable), JSON, CSV and plain-text export with a live preview |
| Settings | Accent colour, score bands, component weights, monitoring interval, start-up and tray behaviour, network testing, report folder, history retention, benchmark size |
| Component | Default weight | Driven by |
|---|---|---|
| CPU | 15% | Sustained load across a sampling window, temperature, OS-reported clock clamping, processor queue |
| RAM | 15% | Absolute free memory, commit charge headroom, hard-fault rate, module configuration |
| Storage | 20% | Per-drive endurance and defect counters, free space, response time, TRIM state |
| Network | 10% | Adapter state, addressing, gateway reachability, packet loss, latency, Wi-Fi signal, interface errors |
| Windows | 15% | Pending updates, restart state, update-stack services, activation, stability history, servicing status |
| Security | 20% | Antivirus and real-time protection, definition age, firewall profiles, Secure Boot, TPM, BitLocker, UAC, RDP, SMB1 |
| Battery | 5% | Full-charge capacity against design capacity, cycle count, temperature |
Score bands default to Excellent 90-100, Good 75-89, Fair 60-74, Poor 40-59, Critical 0-39, and are configurable. Utilisation on its own is treated gently on purpose: a CPU at 100% is doing its job, and Windows fills spare RAM with cache by design. Points come off for durable, hardware-reported problems.
Collection prefers cheap, reliable APIs over WMI wherever both exist — the live monitor samples every second, and WMI is the least dependable source on consumer hardware.
| Area | Primary source | Fallbacks |
|---|---|---|
| CPU load | GetSystemTimes |
— |
| CPU clock, throttling | CallNtPowerInformation(ProcessorInformation) |
— |
| CPU temperature | MSAcpi_ThermalZoneTemperature |
Not available — most desktop boards only publish die temperature through a vendor driver |
| Memory | GlobalMemoryStatusEx, GetPhysicallyInstalledSystemMemory, performance counters |
Win32_PhysicalMemory for per-module detail |
| Drive identity, TRIM, media type | IOCTL_STORAGE_QUERY_PROPERTY (device descriptor, TRIM, seek penalty) |
Win32_DiskDrive, MSFT_PhysicalDisk |
| NVMe health | IOCTL_STORAGE_QUERY_PROPERTY protocol-specific, SMART/Health log page 0x02 |
— |
| ATA / SATA SMART | SMART_RCV_DRIVE_DATA attribute and threshold tables |
MSFT_StorageReliabilityCounter, MSStorageDriver_FailurePredictStatus, Windows disk health status |
| Volume to disk mapping | IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS |
Win32_DiskDriveToDiskPartition associations |
| Storage benchmark | FILE_FLAG_NO_BUFFERING with a page-aligned VirtualAlloc buffer |
— |
| GPU utilisation | GPU Engine performance counters |
— |
| Network | System.Net.NetworkInformation, netsh wlan show interfaces for signal quality |
— |
| Windows servicing | Registry, ServiceController, Windows Update agent (offline cached catalogue) |
Win32_QuickFixEngineering |
| Security | root\SecurityCenter2, Defender WMI provider, registry (firewall, Secure Boot, UAC, RDP, SMB1) |
Elevated probe for TPM and BitLocker |
| Battery | GetSystemPowerStatus, Win32_Battery, root\WMI battery classes |
powercfg /batteryreport /xml |
SystemHealthCenter.exe Launch the dashboard
SystemHealthCenter.exe --report [folder] Scan and write every report format, then exit
SystemHealthCenter.exe --minimized Start hidden in the notification area
--report is handy for scheduled collection: it runs the same scan headlessly and writes HTML,
JSON, CSV and text to the given folder (or the configured report folder).
This is a diagnostic tool. It never enables or disables Microsoft Defender, the firewall, BitLocker, Secure Boot or UAC, and it never changes a security setting on your behalf. Findings in those areas are reported as recommendations for you to act on.
Everything the application writes stays under %LOCALAPPDATA%\SystemHealthCenter:
settings.json— configurationhistory.jsonl— one JSON record per scan, for the trend chartslogs\systemhealthcenter.log— the technical detail behind any Not available
Reports default to Documents\System Health Center. Delete the folder and the application starts
fresh.
Requires the .NET 8 SDK.
git clone https://github.com/unupunct/System-Health-Center.git
cd System-Health-Center
dotnet build src/SystemHealthCenter/SystemHealthCenter.csproj -c ReleaseTo produce the single portable executable:
pwsh build/publish.ps1That writes publish/SystemHealthCenter.exe — self-contained, x64, single file. The script fails
loudly if any loose dependency ends up beside it.
src/SystemHealthCenter/
├── Controls/ Custom-drawn gauge, sparkline and trend chart
├── Health/ Scoring engine, seven calculators, thresholds and weights
├── Infrastructure/ Win32 interop, defensive WMI wrapper, formatting, converters
├── Models/ Data models — raw facts, no judgement
├── Persistence/ Settings and local JSON-lines history
├── Recommendations/ Findings to prioritised actions
├── Reporting/ HTML / JSON / CSV / text report generation
├── Services/ Per-subsystem collection, benchmark, live metrics, elevated probe
├── ViewModels/ MVVM view models
└── Views/ Shell and pages
Collection and scoring are deliberately separate: services return raw facts, and the health engine interprets them. The same engine therefore re-scores an existing snapshot without touching the machine again — which is what happens the moment you change a weight or a band in Settings.
Every domain limit the calculators use — temperature ceilings, free-space floors, endurance
thresholds, latency budgets — lives in one file, Health/ScoringLimits.cs. Score bands live in
Health/HealthThresholds.cs.
Honest about what has and has not been exercised on real hardware:
- Verified on a Windows 11 desktop with a SATA SSD behind Intel RST plus a USB-enclosed SSD: scans are deterministic, 1.8 s with warm WMI, and complete with zero module failures while running as a standard user.
- Written but unexercised: laptop chassis, NVMe drives, mechanical hard disks and Windows 10. The NVMe log-page parser and the battery module in particular have had no real hardware behind them yet.
- PDF export is not bundled. The HTML report carries a print stylesheet, so "print to Microsoft Print to PDF" produces a properly paginated document. Adding a PDF library would have grown the executable for something Windows already does.
- CPU temperature is only available where the platform publishes an ACPI thermal zone. Reading die temperature otherwise requires a kernel driver, which this application deliberately does not install.
- Windows end-of-support reporting is conservative on purpose. Only the Windows 10 date (14 October 2025) is asserted; per-version Windows 11 servicing dates are not hardcoded, because a stale date presented as fact is worse than a pointer to Microsoft's lifecycle pages.
MIT — see LICENSE.




