Adding printers on Windows sucks. prinstall fixes it.prinstall. because fuck printers.
One command. The right vendor driver, pulled from the Microsoft Update Catalog. Installed.Why does adding a printer in 2026 still feel like defusing a bomb? Wrong driver. Missing port. HRESULT 0x80070705. Restart the spooler. Google the error. Download a 200 MB "setup utility." Run it. It doesn't work. Cry. We wrote a tool so you never have to do that again.
Paste into an admin PowerShell:
iwr -useb https://raw.githubusercontent.com/limehawk/prinstall/main/scripts/prinstall_setup.ps1 | iex
What it doesWhat this bad boy does
Built for MSP technicians running it locally or through RMM remote shells.Built for techs who are absolutely done wrestling with printer drivers at 4:47 PM on a Friday.
01Multi-method discoveryIt finds your printers
TCP port probe, IPP, SNMP, and local Get-Printer all in one parallel pipeline. Works even on printers that have SNMP disabled.Scans your whole subnet in seconds. SNMP, IPP, port probes — throws everything at the wall. That printer hiding in the corner with SNMP disabled? Found it. Sit down.
02Deterministic driver matchingThe right damn driver
Scrapes the Microsoft Update Catalog, downloads the candidate driver, parses the INF, and confirms a 1284_CID_* hardware-ID match before installing. No guessing.Not "Generic / Text Only." Not "HP Universal 6 years old." The actual vendor driver, matched by hardware ID, verified before install. We don't guess. We don't pray. We know.
03Network + USB printersUSB printers too
One binary handles both install paths. USB printers hot-swap their driver via Set-Printer without re-creating the queue.Yeah, the USB printer that Karen plugged in and Windows decided to install with "Generic / Text Only"? One command. Driver swapped. Karen prints. You leave on time.
04Clean removeScorched earth removal
Queue → driver → port cleanup with spooler-lag retry and driver-store package removal. No orphaned ports, no dead drivers cluttering Print Server Properties.Queue? Gone. Driver? Gone. Port? Gone. That ghost printer from 2019 that still shows up in Print Server Properties? Obliterated. The print spooler can finally breathe.
05Scriptable CLIScript it and forget it
Pipe --json to jq for RMM automation. Plain text output for humans, structured JSON for scripts, semantic coloring that respects NO_COLOR.Pipe it into your RMM. Deploy to 200 machines at 2 AM. Wake up to zero printer tickets. That's the dream. That's the whole point. Go back to sleep.
06Readable errorsErrors that don't make you cry
PowerShell stderr is parsed and HRESULT-decoded before you see it. No more drowning in CategoryInfo and FullyQualifiedErrorId noise.Remember HRESULT 0x80070705? We decode that garbage into actual English. Because Microsoft sure as hell wasn't going to.
It walks a six-tier cascade — local driver store, bundled packs, manufacturer download, Microsoft Update Catalog, SDI Origin driver packs, and IPP Class Driver fallback — and it will not give up before you do. If one source fails, it tries the next. Then the next. Then the next.
Watch it workWatch this printer get bodied
prinstall add 10.10.20.16 · real terminal outputone command · no clicking through 9 wizard pages · no "restart the spooler"
Six tiers, one commandSix ways to find your driver, because printers are assholes
prinstall add walks the pipeline in priority order — only escalates when the previous tier comes up empty.If one source fails, it tries the next. Then the next. Then the next. It will NOT give up before you do.
-
TIER 01
Local driver storeAlready on your box?
Reuse what's already installed. No network, no side effects. Instant.If Windows already has the driver from a previous install, we just use it. Zero downloads, zero drama. Why would you re-download something that's sitting right there?
-
TIER 02
Local bundleDrivers you already shipped
Drop a folder of extracted vendor packs next to
prinstall.exe(or setPRINSTALL_BUNDLE_DIR) and the bundle tier finds them by HWID. Air-gapped fleets, pre-staged RMM payloads, anything offline. Same.catsignature gate as every other tier.Pushed prinstall out via your RMM with adrivers/folder right next to it? It finds them. Air-gapped site? It finds them. Tech dropped a vendor pack in ProgramData last Tuesday? It finds that too. Zero network, zero excuses. -
TIER 03
Manufacturer downloadStraight from the source
Pull from the embedded URL manifest — HP, Xerox, and Kyocera have stable direct links. More vendors coming.HP, Xerox, Kyocera — their download URLs are hardcoded because someone had to memorize the paths these vendors bury 14 clicks deep on their godforsaken support sites.
-
TIER 04
Update Catalog + INF HWIDMicrosoft's secret driver stash
Search by IPP CID, download a candidate CAB, parse the INF, match the synthesized hardware ID. Deterministic.Microsoft has a whole catalog of drivers they don't tell you about. We scrape it, crack open the CAB, match the hardware ID, and stage the INF. Microsoft couldn't make this easy, so we did.
-
TIER 05
SDI Origin driver packsThe nuclear option
Search SDIO's printer driver pack index by hardware ID. Covers Brother, Canon, Epson, Ricoh, and every other vendor SDIO carries — the brands the Update Catalog often misses. Every pack's
.catAuthenticode signature is verified against Microsoft's certificate chain before install.A community-maintained archive of every printer driver known to humanity. Brother, Canon, Epson, Ricoh — the vendors that make you download a 200 MB "setup utility" just to get a damn INF file. We bypass all of it. Unsigned packs get nuked, so nobody's slipping malware in. -
TIER 06
IPP Class DriverThe "fuck it, just print" fallback
The always-works safety net for any printer that speaks IPP Everywhere (Windows 8+).If literally nothing else works, Microsoft's built-in IPP driver will at least let you print. No duplex, no trays, no fancy stuff — but the paper comes out. Sometimes that's all you need at 5 PM on a Friday.
Every command, at a glanceThe whole damn toolkit
Each subcommand has its own --help. Global flags --json, --verbose, --community, --force work everywhere.Six discovery commands, four driver commands, six SDI commands, two bootstrap commands. --json and --verbose on every single one of them.
01DiscoveryFind the damn printer
prinstall scan [SUBNET] — TCP + IPP + SNMP + mDNS in parallel.
prinstall id <IP> — identify one host via SNMP.
Flags: --method (all/snmp/port/mdns), --timeout, --network-only, --usb-only.Throws SNMP, IPP, port probes, and mDNS at every IP in parallel. Anything that beeps shows up.
02Install & removeAdd it. Nuke it.
prinstall add <IP> — network install, full pipeline cascade.
prinstall add <QUEUE> --usb — swap driver on a USB printer.
prinstall remove <IP|QUEUE> — queue + driver + port cleanup.
prinstall list — every queue Windows knows about.
03Driver managementStage 'em, kill 'em
prinstall driver add <PATH|model> — stage from INF folder, INF file, or model string.
prinstall driver remove <name|fuzzy> — unstage; --force cascades dependent queues.
prinstall driver list — every staged driver, no admin needed.
prinstall driver show <IP> — ranked match candidates for a printer.
04SDI cacheThe driver pack vault
prinstall sdi refresh — pull the latest pack index.
prinstall sdi prefetch — download every printer pack (~1.5 GB, one time).
prinstall sdi verify — Authenticode-check every cached .cat.
prinstall sdi status / list / clean — inspect, list, LRU-prune.
05Self-bootstrapPlant it on the box
prinstall setup install — copies the exe to C:\ProgramData\prinstall\, adds that dir to Machine PATH, and opens UDP 5353 in Windows Firewall for mDNS discovery.
prinstall setup uninstall — reverses all three. Idempotent.
Run from a copy outside the install dir so uninstall doesn't hit the running-exe file lock.Idempotent. Run it twice, run it ten times. Nothing breaks.
06Interactive TUIThe two-panel cockpit
prinstall (no args) — launches a ratatui two-panel layout: printer list + detail pane.
Vim keys: j/k move, h/l swap panels, Enter install, s rescan, ? help, q quit.Vim keys, no mouse, no wizards. j/k to move, Enter to install, q to bail. That's it.
RoadmapMore ways to destroy printer pain
What's next — loosely ordered, priority shifts based on what MSPs actually hit in the field.We're not done. Every feature below is another nail in the coffin of printer-related suffering.
01prinstall health <ip>Is this printer dying?
SNMP Printer MIB query for toner level, drum life, paper tray status, and error state. One --json per machine and the RMM knows which printers need attention before the ticket lands.Toner at 3%? Drum about to die? Paper jam in tray 2 for the last 6 hours? Know about it BEFORE the user calls you screaming. Pipe it into your RMM and stop playing printer paramedic.
02Printer defaults at installSet it up right the first time
Duplex, color/mono, paper size, and set-as-default via Set-PrintConfiguration during add, so the printer shows up ready-to-use instead of needing a second pass.Duplex on. Color off. Letter paper. Set as default. Done at install time. Because nothing says "I hate my job" like getting a callback because the printer defaults to A4 single-sided.
03Batch install modeNuke an entire office at once
One command, multiple IPs. Parallel driver matching across every printer on a site, JSON results per target, one invocation per site visit instead of one per printer.12 printers across 3 floors? One command. All of them. In parallel. Walk in, run it, walk out. That's not a site visit, that's a drive-by.
04Signed binarySmartScreen can shut up
SignPath.io code signing so Windows SmartScreen stops warning on download. MSP deployment gets a lot friendlier when the tech doesn't have to click "Run anyway" every time."Windows protected your PC" — yeah, from the thing that fixes printers. Thanks, Microsoft. Code signing is coming so SmartScreen stops being a hall monitor about it.
05Interactive TUI reworkFull terminal UI
The dense two-panel lazy-style TUI is currently under construction. When it comes back, expect lazygit-style panels, real vim keybindings, and scan-as-you-type subnet filtering.A full terminal UI where you scan, browse, and install without ever touching a mouse or a wizard. Keyboard-driven, no clicking through tabs, no "Next > Next > Finish" energy.
Built for the field, built in the openwhy prinstall? because FUCK printers.
prinstall is an open-source project built by MSP techs, for MSP techs. Every feature comes from real pain in the field — printers that won't install, drivers that don't match, spoolers that crash at the worst possible moment. If you've been there, you can help make it better. Star the repo, open an issue, or ship a PR.We're a community of MSP techs, sysadmins, and IT pros who've collectively lost thousands of hours to printer driver hell. If you've ever rage-Googled an HRESULT code at 5 PM on a Friday, you're one of us. Star the repo. Open an issue. Ship a PR. Let's make this thing so good that no tech ever has to manually install a printer driver again.
InstallGet this thing
Single binary. Drop it on PATH and go.One file. No installer. No .NET runtime. No "please restart your computer." Just copy and run.
-
Grab the latest release and drop it in the current directory:
Or install to a canonical location and add to PATH:iwr https://github.com/limehawk/prinstall/releases/latest/download/prinstall.exe -OutFile prinstall.exeiwr -useb https://raw.githubusercontent.com/limehawk/prinstall/main/scripts/prinstall_setup.ps1 | iex -
Scan your subnet for printers:
.\prinstall.exe scan -
Add one:
.\prinstall.exe add 192.168.1.47 -
Or launch the interactive TUI:
.\prinstall.exe