A GitHub agent plus a small CLI that inventories this machine and reports missing, mismatched, error, firmware, and OS-offered driver updates on Linux and Windows.
It does not download or install vendor .exe / .inf blobs from the internet. Official sources only: Windows Update, the distro package manager, and the PC/chip maker’s support page.
Repo: https://github.com/wbharris/Driver_Scan
Contract: docs/PRODUCT.md. Copilot / coding-agent profile: .github/agents/driver-scan.md.
Driver Scan™ is a trademark of wbharris (common-law ™). See TRADEMARK.md.
| Command | Job |
|---|---|
driver-scan / scan |
Fast inventory: missing, mismatched, error, firmware, OS-offered updates |
list |
Every installed driver in one place, grouped by class |
driver-scan --html |
Stand-alone results page (graphics / audio / network / printer / imaging / …) |
guide |
Ordered next steps (backup → OS update → PC maker → vendor → restore) |
locate |
Official PC-maker and chip-vendor URLs for problem devices |
fetch -o DIR |
Write LINKS.txt; on Linux apt-get download firmware/driver packages into DIR |
backup -o FILE.zip |
Zip the report plus a driver/config snapshot |
restore FILE.zip |
Dry-run restore; --apply writes Linux configs or Windows pnputil /add-driver (tries a System Restore point first). --only NAME for a subset |
ignore add|remove|list |
Hide a device from problem counts |
schedule install |
Repeat the scan; optional --backup --notify |
scan --notify |
Desktop notify when the scan finds problems |
| Severity | Meaning |
|---|---|
missing |
Hardware present, no driver bound (Linux) or Device Manager code 28 (Windows) |
mismatch |
Generic/fallback or OS-incompatible package (Basic Display, nouveau, code 32/39/48) |
error |
Device started and failed (code 10/31/43/52, DKMS broken) |
firmware |
Kernel log shows a firmware load failure |
update |
Distro packages (linux-firmware, NVIDIA, mesa, …) or Windows Update driver offers |
ok / skip |
Bound and healthy, or chipset/hub functions that never have a loadable driver |
git clone https://github.com/wbharris/Driver_Scan.git
cd Driver_Scan
python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"Windows (PowerShell):
git clone https://github.com/wbharris/Driver_Scan.git
cd Driver_Scan
py -3 -m venv .venv
.\.venv\Scripts\pip install -e ".[dev]"Python 3.11+. No extra runtime packages. Windows collection uses the bundled windows_collect.ps1 (PowerShell 5.1 or pwsh).
driver-scan
driver-scan --problems-only
driver-scan --json
driver-scan --html -o cases/$(hostname).html
driver-scan --markdown -o cases/$(hostname).md
driver-scan locate
driver-scan fetch -o ./driver-downloads
driver-scan backup -o ./drivers.zip
driver-scan restore ./drivers.zip
driver-scan restore ./drivers.zip --apply
driver-scan list
driver-scan list --category graphics --older-than 365
driver-scan ignore add pci:02:00.0
driver-scan guide
driver-scan --notify
driver-scan --category printer --category imaging
driver-scan schedule install --every daily --backup --notify
driver-scan schedule status
driver-scan schedule removedriver-scan --os linux
driver-scan --os windows --no-windows-update
Simulate Windows from Linux (collector JSON, no Windows box required):
.venv/bin/python tests/simulate_windows11.py
.venv/bin/python tests/simulate_windowsserver2025.py
.venv/bin/python tests/simulate_ubuntu2604.py
.venv/bin/python tests/simulate_rhel102.py
driver-scan --fixture tests/data/windows11-dell.json --include-ignored --problems-only
driver-scan --fixture tests/data/windowsserver2025-poweredge.json --include-ignored --problems-only
driver-scan --fixture tests/data/ubuntu-26.04.1-xps.json --include-ignored --problems-only
driver-scan --fixture tests/data/rhel-10.2-poweredge.json --include-ignored --problems-only
driver-scan list --fixture tests/data/ubuntu-26.04.1-xps.json --include-ignored --category graphicsExit code 1 if any missing / error / firmware / update finding exists, else 0.
On Windows without Python you can still dump JSON. Do not use a relative -File src\... unless you are already in the clone root — that is what broke the Latitude 5490 capture. Full procedure: docs/LIVE-WINDOWS.md.
No clone (absolute -File + Desktop -OutFile):
$script = Join-Path $env:TEMP "windows_collect.ps1"
$out = Join-Path $env:USERPROFILE "Desktop\dell-live.json"
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/wbharris/Driver_Scan/main/src/driver_scan/windows_collect.ps1" -OutFile $script
powershell -NoProfile -ExecutionPolicy Bypass -File $script -IncludeWindowsUpdate -OutFile $outFrom a clone, repo root only:
powershell -NoProfile -ExecutionPolicy Bypass -File "$PWD\src\driver_scan\windows_collect.ps1" -IncludeWindowsUpdate -OutFile "$env:USERPROFILE\Desktop\dell-live.json"Redact the serial, then classify on a machine with driver-scan (--html -o creates cases\ if needed):
.venv/bin/driver-scan redact dell-live.json -o tests/data/windows11-live.json
.venv/bin/driver-scan --fixture tests/data/windows11-live.json --include-ignored --html -o cases/live.htmlOn GitHub.com Copilot coding agent / VS Code custom agents: select Driver Scan (.github/agents/driver-scan.md). It runs driver-scan --markdown --problems-only and stops at official next steps.
- “Outdated” means the OS offered an update (apt / Windows Update), not a scraped commercial catalog.
- Chipset bridges, ISA/PMC, and USB hubs are
skip, not missing. - Firmware lines need
dmesgorjournalctlpermission; if those fail, the report lists them under skipped tools. - Prefer Windows Update, then Dell/HP/Lenovo/ASUS, then Intel/AMD/NVIDIA.
fetchnever pulls random.exe/.inffrom the web. Linux downloads distro packages only.
GPL-3.0-or-later. See LICENSE.