Thumb-drive friendly, no-install Windows hardware health check toolkit powered by Sysinternals and PowerShell.
A zero-dependency PowerShell solution that runs a comprehensive, curated set of Sysinternals and Windows diagnostic tools. It then processes the raw data to produce two essential reports: a Clean Summary Report (human-readable, de-noised, with recommendations) and a Detailed Report (cleaned tool outputs).
The essential utility for:
- Field diagnostics and client handoff reports.
- Establishing a system baseline health check.
- Quickly identifying performance bottlenecks.
v2.4 focuses on fixing real-world network testing failures observed in the field, particularly on systems running VPN software (Mullvad, Tailscale, WireGuard) and environments with virtual adapters (VMware, Hyper-V). It also resolves a latency test crash that affected every system, and fixes report encoding that caused garbled output in Notepad and legacy viewers.
| # | Area | Issue | Impact |
|---|---|---|---|
| 1 | Network Latency | $targetPort was never defined — Test-NetConnection received Port=0 and threw a validation error on every run |
Critical — latency test always failed |
| 2 | Network Latency | PsPing output regex was too strict — minor whitespace variations caused "Unable to parse" on valid results |
Medium — latency stats silently dropped |
| 3 | Network Speed | Single hardcoded Hetzner HTTPS URL failed under VPN/proxy TLS interception (e.g. Mullvad) | High — speed test failed on VPN-connected machines |
| 4 | Network Speed | No fallback if the download URL failed | Medium — single point of failure |
| 5 | Recommendations | VMware VMnet and VPN virtual adapters (Mullvad, Tailscale) were flagged as "slow physical NICs" at 100 Mbps | Low — false positive recommendation |
| 6 | Reports | Report files written as UTF-8 with Unicode bullets (•) and arrows (->) rendered as mojibake (• â†') in Notepad and legacy viewers |
Medium — garbled report output |
| 7 | Reports | Box-drawing characters (└─) in the menu display caused non-ASCII bytes in the script itself |
Low — cosmetic |
| 8 | Batch Launcher | VERIFY section exit-code branching silently swallowed function output |
Low — misleading success messages |
| 9 | Batch Launcher | Sysinternals download had no SSL bypass — same VPN TLS issue as PS1 | High — download failed on VPN machines |
Test-NetworkLatency
- Removed the undefined
$targetPortvariable entirely — ICMP ping does not require a port - Removed
-Portand-InformationLevel DetailedfromTest-NetConnection(both require a valid port number) - Made
PsPingICMP args use bare IP instead ofIP:Portformat - Widened PsPing regex to allow variable whitespace (
\s*instead of literal spaces) - Added a debug "raw tail" output line when PsPing parsing fails, so failures are diagnosable
Test-NetworkSpeed - Replaced single Hetzner URL with a 3-URL fallback chain: Cloudflare → Hetzner HTTP → OVH
- Added
[Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }before each attempt to bypass VPN/proxy MITM certificate interception, restored immediately after - Added minimum file size check (1000 bytes) so an error HTML page returned by a firewall isn't measured as a "successful" download Recommendation Engine — NIC check
- Now iterates adapter lines individually rather than pattern-matching the whole output block
- Skips lines matching:
VMware,VMnet,Virtual,vEthernet,Tailscale,Mullvad,WireGuard,Loopback,Hyper-V,VPN,TAP-Windows,OpenVPN - Only physical adapters at 10/100 Mbps generate a recommendation Report encoding
- All
•replaced with*, all->were already ASCII but confirmed clean Out-Filechanged from-Encoding UTF8to-Encoding ASCII- Removed Unicode box-drawing characters (
└─) from the menu display strings - Script itself is now fully 7-bit ASCII — no encoding surprises in any viewer
Batch Launcher (
SystemTester.bat) - Added the same SSL bypass pattern to the Sysinternals Suite download block
- Simplified VERIFY section — removed exit-code branching that produced misleading results
- Removed stale reference to legacy
SystemTester_FIXED.ps1filename from the error message
- One-click Menu or Autorun — interactive menu or
-AutoRunparameter - Output Cleaner — removes banners, EULA text, usage blocks for readable reports
- Comprehensive Tests — CPU, RAM, Disk, GPU, Network, OS Health, Windows Update status
- Enhanced GPU Testing — Multi-GPU support, NVIDIA/AMD vendor tools, display configuration
- Network Speed & Latency — Multi-URL fallback download test, PsPing integration, VPN-aware
- Tool Integrity Verification — Digital signature checking for all Sysinternals tools
- Smart Reporting — timestamped Clean Summary + Detailed TXT reports with recommendations
- Fully Portable — runs from USB; no installation required
- Graceful Degradation — missing tools detected and skipped automatically
- Robust Elevation Handling — reliable admin detection (Windows Home compatible)
- Auto-Download Tools — built-in Sysinternals Suite downloader via batch launcher
- Windows Update Integration — checks pending updates and service status
- Modern PowerShell — uses CIM instances (not deprecated WMI) for better performance
- OS: Windows 10/11 (Windows Server supported)
- PowerShell: 5.1+ or PowerShell 7
- Permissions: Administrator rights recommended (some tests require elevation)
- Internet: Only needed for auto-download feature (optional)
- Sysinternals Tools: Auto-downloadable via launcher or manual installation
- GPU Tools (Optional): NVIDIA drivers (nvidia-smi), AMD drivers, GPU-Z
SystemTester/
+-- SystemTester.ps1 # Main PowerShell script
+-- SystemTester.bat # Batch launcher
+-- README.md
+-- LICENSE
+-- Sysinternals/ # Auto-created by launcher (Option 5)
| +-- psinfo.exe
| +-- coreinfo.exe
| +-- pslist.exe
| +-- handle.exe
| +-- psping.exe # Required for latency testing
| +-- autorunsc.exe
| +-- ... (60+ other tools)
+-- Tools/ # GPU testing tools (optional)
| +-- GPU-Z.exe # Via launcher Option 6
+-- Reports/ # Auto-created on first report generation
+-- SystemTest_Clean_20260423_143022.txt
+-- SystemTest_Detailed_20260423_143022.txt
+-- energy-report.html # If power test ran (admin only)
- Download or clone this repository
- Run
SystemTester.bat(will request admin elevation) - Choose Option 5 to auto-download Sysinternals Suite (first time only)
- Choose Option 6 to set up GPU testing tools (optional)
- Choose Option 1 for interactive menu or Option 2 to run all tests
- Reports are saved in the script directory
# Interactive menu
powershell -ExecutionPolicy Bypass -File .\SystemTester.ps1
# Run all tests automatically
powershell -ExecutionPolicy Bypass -File .\SystemTester.ps1 -AutoRunIf Sysinternals tools are missing:
- Automatic: Use launcher Menu Option 5 to download (~35 MB)
- Manual: Download from live.sysinternals.com, extract to
.\Sysinternals\For enhanced GPU testing: - NVIDIA GPUs: Install latest NVIDIA drivers (includes nvidia-smi)
- AMD GPUs: Install latest AMD drivers
- GPU-Z (Optional): Use launcher Menu Option 6 -> 1 to download
| # | Category | Description | Key Tools |
|---|---|---|---|
| 1 | System Information | OS details, computer info, clock resolution | psinfo, clockres, CIM |
| 2 | CPU Testing | Architecture, performance benchmarks | coreinfo, synthetic test |
| 3 | RAM Testing | Capacity, usage patterns | CIM queries |
| 4 | Storage Testing | Drives, performance, fragmentation | du, contig, read/write test |
| 5 | Process Analysis | Running processes, handles, process tree | pslist, handle |
| 6 | Security Analysis | Autorun entries, startup items | autorunsc |
| 7 | Network Analysis | Connectivity, latency, speed, adapters | netstat, psping, Test-NetConnection |
| 8 | OS Health | System file integrity, component store | DISM, SFC |
| 9 | Storage SMART | Drive health | Get-PhysicalDisk |
| 10 | SSD TRIM | TRIM enablement status | fsutil |
| 11 | Network Adapters | Link status, speed, IP/MAC | Get-NetAdapter |
| 12 | GPU (Enhanced) | Multi-GPU info, vendor tools, memory | CIM, dxdiag, nvidia-smi |
| 12a | Basic GPU Info | Details, displays, drivers, DirectX, OpenGL | CIM, dxdiag |
| 12b | Vendor-Specific | NVIDIA/AMD metrics, temps, utilization | nvidia-smi, AMD registry |
| 12c | GPU Memory | VRAM capacity, usage, performance counters | CIM, perf counters |
| 13 | Power/Battery | Battery health, energy report | powercfg, WMI |
| 14 | Hardware Events | WHEA error logs (last 7 days) | Event Viewer |
| 15 | Windows Update | Pending updates, service status | Windows Update COM API |
The network test was the most heavily revised area in v2.4. Specific improvements:
- Speed test now tries three servers in sequence (Cloudflare, Hetzner HTTP, OVH) and stops at the first success, rather than failing outright if the single Hetzner HTTPS URL is blocked or intercepted
- SSL certificate bypass is applied per-attempt and restored immediately after, handling VPN and proxy setups that perform TLS interception (Mullvad, corporate proxies, etc.)
- Latency test now runs without a port parameter, so the
Test-NetConnectionICMP ping actually executes on every system instead of throwing a port validation error - PsPing parsing is more flexible — results are captured correctly across different PsPing output formats
- Adapter recommendations no longer flag VMware, Hyper-V, Tailscale, Mullvad, or other virtual adapters as "slow physical NICs"
=========================================
SYSTEM TEST REPORT v2.4
CLEAN SUMMARY
=========================================
Date: 04/23/2026 14:30:22
Computer: DESKTOP-ABC123
Admin: YES
SUMMARY:
Total Tests: 33
Success: 31
Failed: 0
Skipped: 2
Success Rate: 93.9%
KEY FINDINGS:
-------------
SYSTEM:
OS: Microsoft Windows 11 Pro 10.0.26200
Architecture: 64-bit
Computer: DESKTOP-ABC123
Manufacturer: Micro-Star International Co., Ltd.
Model: MS-7D30
RAM: 63.73 GB
MEMORY:
Total RAM: 63.73 GB
Available: 42.07 GB
Used: 21.66 GB
Usage: 34%
DISK PERFORMANCE:
Write: 200.51 MB/s
Read: 222.35 MB/s
GPU:
Name: NVIDIA GeForce RTX 3080
Adapter RAM: 10 GB
Driver Version: 32.0.15.9621
NETWORK SPEED:
Active Link Speeds:
Wi-Fi: 2.4 Gbps
Mullvad: 100 Gbps
Tailscale: 100 Gbps
Internet Download Test:
URL: https://speed.cloudflare.com/__down?bytes=10000000
File Size: 9.54 MB
Time: 0.84 sec
Throughput: 906.7 Mbps (113.3 MB/s)
NETWORK LATENCY:
Target: 8.8.8.8
Test-NetConnection:
Ping Succeeded: True
Ping RTT: 12 ms
PsPing Summary:
Min: 11.2 ms
Max: 14.7 ms
Avg: 12.4 ms
WINDOWS UPDATE:
Service: Running
Pending: 0
Pending Updates: None
RECOMMENDATIONS:
----------------
* GOOD: Low memory usage (34%) - plenty of RAM available
* GOOD: Windows is up to date
* INFO: GPU drivers are over 1 year old
-> Update to latest drivers for best performance
-> NVIDIA: GeForce Experience or nvidia.com
-> AMD: amd.com/en/support
For detailed output, see: SystemTest_Detailed_20260423_143022.txt
Note: Report files use plain ASCII — bullets are * and arrows are ->. This ensures correct display in Notepad, legacy terminals, and any text viewer without encoding configuration.
The batch launcher (SystemTester.bat) provides:
- Run Interactive Menu — Select individual tests (includes GPU sub-options 12, 12a, 12b, 12c)
- Run ALL Tests Automatically — Complete system scan with auto-report
- Fix PowerShell Execution Policy — Set CurrentUser to RemoteSigned
- Verify Tool Integrity — Check digital signatures and file sizes of Sysinternals tools
- Download/Update Sysinternals Suite — Auto-download from Microsoft (~35 MB); VPN-compatible in v2.4
- GPU Testing Tools Manager — Download and manage GPU testing tools
- Help / Troubleshooting — Comprehensive troubleshooting guide updated for v2.4
- Exit
Cause: VPN or proxy performing TLS inspection (Mullvad, Tailscale, corporate proxy). Status: Fixed in v2.4. The script now tries three different servers and bypasses certificate validation per-attempt. If all three fail, check firewall rules blocking outbound HTTP/HTTPS.
Cause: Bug in v2.21 — an undefined $targetPort variable caused Test-NetConnection to receive Port=0, which Windows rejects.
Status: Fixed in v2.4.
Cause: PsPing output formatting variation not matched by the old strict regex. Status: Fixed in v2.4. If it still shows, the debug line will display the raw PsPing output for diagnosis.
Cause: Old recommendation logic matched 100 Mbps anywhere in the adapter list, including virtual adapters.
Status: Fixed in v2.4. Virtual and VPN adapters are now excluded from the physical NIC speed check.
Cause: Report was written as UTF-8 but viewed in Notepad or a tool expecting ASCII/Latin-1.
Status: Fixed in v2.4. Reports now use ASCII encoding and plain * / -> characters.
Solution: Use launcher Menu Option 3, or run:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
Solution: Right-click SystemTester.bat and choose "Run as administrator".
Solution: Use launcher Menu Option 5 to auto-download, or manually download from live.sysinternals.com.
Reports are saved to a Reports\ subfolder inside the script directory — not the script root itself.
Full path: <script directory>\Reports\SystemTest_Clean_*.txt
The Reports\ folder is created automatically the first time a report is generated. If reports are missing:
- Confirm tests were run before generating the report (PS1 menu option 17, or use autorun)
- Check the script directory is not read-only (this can occur on some USB drives formatted as FAT32 with a write-protect switch)
- The console output after report generation always shows the exact file paths
- CPU Performance: ~10 seconds
- Power/Energy Report: ~15 seconds (admin only)
- Windows Update Search: 30-90 seconds
- DISM/SFC Scans: 5-15 minutes each (admin only)
- DirectX Diagnostics (dxdiag): up to 50 seconds
- No Telemetry: Script does not send data anywhere; purely local operation
- Auto-Download: Downloads only from official Microsoft servers (download.sysinternals.com)
- Report Contents: Includes computer name, hardware details, installed driver paths — review before sharing with clients
- Admin Rights: Required for DISM, SFC, energy reports, SMART data, Windows Update queries
- SSL Bypass: The certificate validation bypass used during speed/download tests is scoped per-request and restored immediately. It does not persist after the test completes.
- Fixed latency test crash: removed undefined
$targetPortand brokenTest-NetConnectionargs - Fixed speed test SSL failure under VPN/proxy TLS interception
- Added 3-URL fallback chain for speed test (Cloudflare, Hetzner HTTP, OVH)
- Added per-attempt SSL bypass with automatic restore
- Fixed PsPing result parsing with flexible whitespace regex
- Added PsPing debug output when parsing fails
- Fixed false-positive "slow NIC" recommendation for virtual/VPN adapters
- Fixed report encoding mojibake: switched to ASCII, replaced Unicode bullets/arrows
- Removed Unicode box-drawing characters from menu display
- Reports now saved to
Reports\subfolder instead of script root; folder is auto-created on first run - Energy report (powercfg) also redirected into
Reports\subfolder - Batch: Added SSL bypass to Sysinternals Suite download
- Batch: Simplified VERIFY section, removed misleading exit-code branching
- Batch: Removed stale
SystemTester_FIXED.ps1legacy filename reference - Batch: Updated Help section to document v2.4 changes
- Batch: EXIT screen updated to show
Reports\subfolder path
- Added tool integrity verification (digital signature checking)
- Added dual report system (Clean Summary + Detailed)
- Fixed memory usage calculation (FreePhysicalMemory unit conversion)
- Added launcher batch file with admin elevation
- Enhanced GPU testing: multi-GPU support, NVIDIA-SMI integration, AMD detection
- Added GPU Tools Manager (batch menu option 6)
- Added Windows Update integration
- Added WHEA hardware event log check
- Added network speed and latency testing (initial implementation)
- Complete rewrite with modular function structure
- Added interactive menu system
- Added
-AutoRunparameter for unattended operation - Added recommendations engine
- Improved report formatting
- HTML report export with charts
- Baseline comparison mode (compare current vs. previous test)
- Skip flags (
-SkipCPU,-SkipNetwork, etc.) - CSV export for data analysis
- Memory leak detection
- Audio device testing
- Intel Arc GPU support
- WPF/WinUI graphical interface option
- Real-time monitoring dashboard
- Email report delivery
- Task Scheduler integration for scheduled testing
- Multi-computer report aggregation
- Signed releases with code signing certificate
- Pester test suite for CI/CD
Basic GPU Info (Option 12a):
- All installed GPUs with full specs (VRAM, resolution, refresh rate, PNP ID)
- Display/monitor configuration with manufacturer and model decoding
- Driver details with digital signatures
- DirectX version and capabilities from dxdiag
- OpenGL registry information
- Hardware-accelerated GPU scheduling status Vendor-Specific Tests (Option 12b):
- NVIDIA: Real-time metrics via nvidia-smi (temperature, utilization, memory, power draw, clock speeds)
- AMD: Registry-based driver detection across all registry positions (
\0000,\0001, etc.) GPU Memory (Option 12c): - Total VRAM capacity
- Active GPU process detection via performance counters (falls back to basic info if unavailable)
| Tool | Required For | Status |
|---|---|---|
| CIM/WMI | Basic GPU info | Always available |
| dxdiag | DirectX info | Always available |
| nvidia-smi | NVIDIA metrics | Included with NVIDIA drivers |
| Registry | AMD detection | Always available |
| GPU-Z | Advanced monitoring | Manual download via Option 6 |
Recommended tools via launcher Option 6 -> 4:
- FurMark — GPU stress test (generates significant heat — use with caution on laptops)
- 3DMark — Industry standard benchmark
- Unigine Heaven/Valley — Graphics stress testing
- OCCT — Error detection and stability testing
Contributions welcome. Priority areas:
- Bug reports — test on varied hardware and network environments
- Parsers — new tool output cleaners for additional Sysinternals tools
- Tests — additional diagnostic modules (audio, temperatures, peripherals)
- GPU — Intel Arc integration
- Network — additional connectivity and performance tests
- Documentation — screenshots, wiki articles, tutorial content Before contributing:
- Open an issue to discuss large changes
- Follow existing code style
- Test on Windows 10 and Windows 11, admin and non-admin
- Test on systems with VPN software active (Mullvad, Tailscale, WireGuard)
- Update README and Help section in launcher
- Run PSScriptAnalyzer if possible Testing Checklist:
- Single GPU system (NVIDIA / AMD / Intel integrated)
- Multi-GPU system (discrete + integrated)
- System with active VPN (Mullvad, Tailscale, or similar)
- System with VMware or Hyper-V virtual adapters
- Paths with spaces in username
- Non-admin execution
- Admin execution
- Missing Sysinternals tools (should degrade gracefully)
- Menu Option 4 (Tool Verification)
- Menu Option 6 (GPU Tools Manager)
MIT License — See LICENSE file for details.
Copyright (c) 2025 Pacific Northwest Computers
- Sysinternals Suite: live.sysinternals.com
- Sysinternals Docs: docs.microsoft.com/sysinternals
- PowerShell Docs: docs.microsoft.com/powershell
- GPU-Z: techpowerup.com/gpuz
- NVIDIA Drivers: nvidia.com/drivers
- AMD Drivers: amd.com/support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Bug Reports: Open a GitHub issue — include OS build, GPU type, admin status, and full error message
- Feature Requests: Start a GitHub discussion
- Commercial Support: jon@pnwcomputers.com / 360-624-7379
- Microsoft Sysinternals Team — For the diagnostic tools this project is built around
- Mark Russinovich — For creating and maintaining Sysinternals
- NVIDIA & AMD — For providing diagnostic APIs
- TechPowerUp — For GPU-Z
- PowerShell Community — For patterns and best practices
Tested on Windows 10 (1909+) and Windows 11 — Enterprise, Pro, and Home editions
Last Updated: April 2026 | Version: 2.4 | Status: Production Ready
