A toolkit for IT technicians to check and repair Windows and Linux machines: system and hardware information, SFC/DISM, battery reports, network tests, updates, boot repair and more, from one menu.
| Platform | Terminal (CLI) | Desktop app (GUI) | Minimum |
|---|---|---|---|
| Windows | PowerShell 7 | WinUI 3 (.NET 10) | Windows 10 22H2 (build 19045) |
| Linux | Python 3.11+ | GTK 4 + libadwaita | Python 3.11 |
The Windows tools run as Administrator. The Linux tools run as a normal user
and ask for the password (through pkexec) only for the actions that need
root.
Download from Releases:
pcHealth-<version>-win-x64.msi(or-win-arm64.msi): installs to Program Files with a Start menu shortcut.pcHealth-<version>-win-x64.zip(or-win-arm64.zip): the same app, portable, for example on a USB stick.
Both are self-contained: the .NET runtime and Windows App SDK are included, so nothing has to be installed on the machine first.
# Unattended install
msiexec /i pcHealth-2.0.0-win-x64.msi /qnDownload pcHealth-CLI-<version>.zip from Releases (it is not part of the MSI),
extract it and run Start.ps1, or run it from a clone of this repository:
.\src\Windows\CLI\Start.ps1Start.ps1 also runs in Windows PowerShell 5.1. It checks the Windows build,
restarts itself as Administrator, offers to install PowerShell 7 through winget
when it is missing, and then opens the menu.
Clone or download the repository, then:
cd src/Linux
python3 -m pchealth # terminal menu
python3 -m pchealth.gui.app # desktop appThe terminal menu needs only Python. The desktop app also needs PyGObject, GTK 4 and libadwaita:
sudo dnf install python3-gobject gtk4 libadwaita # Fedora / RHEL
sudo apt install python3-gi gir1.2-gtk-4.0 gir1.2-adw-1 # Debian / Ubuntu
sudo pacman -S python-gobject gtk4 libadwaita # Arch
sudo zypper install python3-gobject gtk4 libadwaita # openSUSEDo not start the desktop app with sudo; it asks for elevation per action.
See src/Linux/README.md for details.
The list comes from assets/tools.json. Each platform numbers its own entries, so the numbers differ between Windows and Linux.
| Tool | What it does |
|---|---|
| System Information | OS, build, firmware type, Secure Boot, TPM, RAM |
| Hardware Information | CPU, GPU, RAM, chipset, disks (SMART through smartctl) |
| Scan + Repair | sfc /scannow, DISM CheckHealth/ScanHealth/RestoreHealth, sfc again |
| Battery Report | powercfg /batteryreport |
| Windows Update | Opens Windows Update in Settings |
| Disk Optimization | Opens Optimize Drives (dfrgui) |
| Disk Cleanup | Opens Disk Cleanup (cleanmgr) |
| Short Ping Test | 4 pings to 8.8.8.8 |
| Continuous Ping Test | Pings 8.8.8.8 until you press Q, Esc or Ctrl+C |
| Traceroute to Google | Route to google.com |
| Reset Network Stack | Flushes DNS, renews DHCP, resets Winsock and TCP/IP (asks first) |
| Update all packages | winget upgrade --all |
| Update HP Drivers | Installs HP Image Assistant (HP devices only) |
| Restart Audio Drivers | Restarts the Windows audio services |
| Open Battery Report | Opens the last generated report |
| Open CBS Log | Opens C:\Windows\Logs\CBS\CBS.log (the SFC/DISM log) |
| Get Ninite | Downloads Ninite (Edge, Chrome, VLC, 7-Zip) and runs it if the signature is valid |
| Windows License Key | Product key from the firmware (OA3) and the registry |
| BIOS Password Recovery | Opens bios-pw.org (by @bacher09) |
| Boot Repair | UEFI only: chkdsk /scan, sfc, then bcdboot (see below) |
| Shutdown / Reboot / Log Off | Normal shutdown, so apps can save their work |
| Repair Winget | Reinstalls winget with winget-install by @asheroto |
The desktop app also has a Health overview and Repair Windows, which starts Windows' own in-place repair (keeps files and apps).
| Tool | What it does |
|---|---|
| System Information | Distro, kernel, firmware, Secure Boot, RAM |
| Hardware Information | CPU, GPU, RAM, disks (SMART through smartctl), sensors |
| Short Ping Test | 4 pings to 8.8.8.8 |
| Continuous Ping Test | Pings until stopped |
| Traceroute to Google | traceroute / tracepath |
| BIOS Password Recovery | Opens bios-pw.org |
| Shutdown / Reboot / Log Off | |
| Update all packages | apt, dnf, pacman or zypper |
| Topgrade | Runs topgrade in a terminal |
| Battery Report | Health, cycle count and power draw from sysfs |
| Scan + Repair | Checks installed files against the package database |
| Disk Optimization | fstrim on SSDs |
| Firmware Update | fwupd / LVFS |
| Boot Repair | systemd-boot, GRUB or Limine on UEFI |
| Disk Cleanup | Package cache, journal, thumbnails; asks before removing packages |
| Restart Audio | Restarts PipeWire or PulseAudio |
| Reset Network Stack | Restarts NetworkManager and flushes the DNS cache |
| View System Logs | Errors and warnings from journalctl, failed units |
On image-based systems (Fedora Silverblue, Bazzite, Kinoite) the tools that
change packages or boot files are hidden, because /usr is read-only there.
- Boot Repair (Windows) rewrites the EFI boot files with
bcdboot. It refuses legacy BIOS installs. It suspends BitLocker for one restart first; if that is not possible it stops before touching the boot files. Rewriting the boot files also puts Windows Boot Manager first in the firmware boot order, which matters on dual-boot machines. - Reset Network Stack drops the connection (remote sessions disconnect) and can remove static IP and DNS settings.
- Update all packages, Get Ninite and Update HP Drivers install software.
Installs, updates or opens common diagnostic tools.
| Windows (winget) | Linux (package manager) |
|---|---|
| HWiNFO64 | htop |
| HWMonitor | iotop |
| Malwarebytes AdwCleaner | smartmontools |
| CrystalDiskInfo | stress-ng |
| CrystalDiskMark | nmap |
| Prime95 | |
| Windows PowerToys |
Needs the .NET 10 SDK. Visual Studio 2026 is optional.
dotnet build src/Windows/GUI/pcHealth/pcHealth.csproj -c Debug -p:Platform=x64
pwsh -File src/Windows/GUI/Run-Debug.ps1 # build, run, and show the log in the terminalThe app must run as Administrator (see app.manifest), so starting it shows a
UAC prompt. Logs go to %LOCALAPPDATA%\pcHealth.
Release build (self-contained ZIPs, CLI ZIP and MSI). The MSI needs WiX 7:
dotnet tool install --global wix --version 7.0.0.
pwsh -File development/tools/Build-Release.ps1 -Architecture x64cd src/Linux
python3 -m ruff check .
python3 -m ruff format --check .
python3 -m mypy pchealth| Path | Contents |
|---|---|
src/Windows/CLI/ |
PowerShell 7 terminal tool (Start.ps1, menus, tools) |
src/Windows/GUI/ |
WinUI 3 desktop app |
src/Linux/ |
Python package pchealth: terminal menu and GTK app |
assets/tools.json |
Tool list used by the Linux app; the Windows menus are kept in sync by hand |
assets/hardware-db.json |
CPU/GPU release years for the Health overview |
installer/ |
WiX source for the MSI |
development/tools/ |
Build and maintenance scripts |
Open an issue before starting larger changes. Follow the conventions of the part you change; AGENTS.md lists them per language.
A new tool is added to assets/tools.json first, then:
- Windows CLI: a
Verb-Noun.ps1script insrc/Windows/CLI/tools/and an entry insrc/Windows/CLI/menus/Tools.ps1. - Windows GUI: a page and view model, and an entry in
ToolsViewModel.cs. - Linux: a function in
src/Linux/pchealth/tools/and an entry inREGISTRYinpchealth/tools/__init__.py. CI fails whentools.jsonlists a Linux tool that the registry cannot run.
Report security issues privately; see SECURITY.md.
Discord: REALSDEALS, or open an issue.
pcHealth started as a batch script (Scripts/CMD/pcHealth.bat, still in the
git history). Version 2 replaced it with the PowerShell CLI, the WinUI app and
the Linux app, and merged these earlier projects into this repository:
- pcHealthPlus and pcHealthPlus-VS: PowerShell tools
- pcHealth-GUI: Python GUI
- Win_Scan: SFC and DISM scanner


