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"

PS> prinstall add 10.10.20.16
━━ Discovery ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SNMP Brother MFC-L2750DW series
IPP Brother MFC-L2750DW series (CID confirmed)
DID Brother MFC-L2750DW series
━━ Driver Resolution ━━━━━━━━━━━━━━━━━━━━━━━━━
Manufacturer install failed
Catalog Brother Laser Type1 Class Driver
━━ Install ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Port IP_10.10.20.16
Driver Brother Laser Type1 Class Driver
Queue Brother MFC-L2750DW series
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Installed in 10.5s via Microsoft Update Catalog
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Printer installed successfully!
Name: Brother MFC-L2750DW series
Driver: Brother Laser Type1 Class Driver
Port: IP_10.10.20.16

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.

  1. 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?

  2. TIER 02

    Local bundleDrivers you already shipped

    Drop a folder of extracted vendor packs next to prinstall.exe (or set PRINSTALL_BUNDLE_DIR) and the bundle tier finds them by HWID. Air-gapped fleets, pre-staged RMM payloads, anything offline. Same .cat signature gate as every other tier.Pushed prinstall out via your RMM with a drivers/ 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.

  3. 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.

  4. 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.

  5. 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 .cat Authenticode 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.

  6. 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.

Contribute on GitHub →Join the fight on GitHub →

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.

  1. Grab the latest release and drop it in the current directory:

    iwr https://github.com/limehawk/prinstall/releases/latest/download/prinstall.exe -OutFile prinstall.exe
    Or install to a canonical location and add to PATH:
    iwr -useb https://raw.githubusercontent.com/limehawk/prinstall/main/scripts/prinstall_setup.ps1 | iex
  2. Scan your subnet for printers:

    .\prinstall.exe scan
  3. Add one:

    .\prinstall.exe add 192.168.1.47
  4. Or launch the interactive TUI:

    .\prinstall.exe