# Feature Research

**Domain:** Printer deployment package generator for IT admins / MSPs (Intune + NinjaRMM)
**Researched:** 2026-04-10
**Confidence:** HIGH (core features verified against multiple official and community sources)

---

## Feature Landscape

### Table Stakes (Users Expect These)

Features IT admins and MSPs assume exist in any printer deployment tool.
Missing these = product feels incomplete or unusable for the target workflow.

| Feature | Why Expected | Complexity | Notes |
|---------|--------------|------------|-------|
| Printer name configuration | Every deployment script requires a display name | LOW | Maps directly to `Add-Printer -Name` parameter; must match detection registry key exactly |
| IP address / hostname input | TCP/IP port creation requires the printer's network address | LOW | Used for `Add-PrinterPort -PrinterHostAddress`; accepts both IP and DNS name |
| Driver file upload (ZIP/INF) | Drivers must be bundled in the package — no external downloads at deploy time | MEDIUM | Entire extracted driver folder needed (INF + CAT + dependent files, up to 4 folders deep); partial upload breaks deployment silently |
| Driver name selection from INF | Must exactly match the driver string in the INF file | MEDIUM | Wrong driver name = silent install failure; tool should parse INF to offer a dropdown instead of free text |
| PowerShell install script generation | Core deliverable for both Intune and NinjaRMM | MEDIUM | Must call `pnputil /add-driver`, `Add-PrinterPort`, `Add-PrinterDriver`, `Add-Printer` in correct order |
| PowerShell uninstall script generation | Intune Win32 apps require an uninstall command | LOW | `Remove-Printer` + `Remove-PrinterDriver` + `Remove-PrinterPort` |
| Intune detection rule / detection script | Win32 apps require detection to know if install succeeded | MEDIUM | Registry check at `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\[Name]`; tool generates this script |
| .intunewin package export | End deliverable for Intune Win32 app deployment | HIGH | AES-256 + HMAC-SHA256 encrypted ZIP-in-ZIP format; can be implemented without IntuneWinAppUtil.exe using the documented format (C# library: volodymyrsmirnov/IntuneWin or svrooij ContentPrep) |
| NinjaRMM ZIP package export | End deliverable for RMM script-based deployment | LOW | ZIP containing PS install script + driver folder; no encryption required |
| Duplex mode setting | IT admins universally configure this at deployment time | LOW | `Set-PrintConfiguration -DuplexingMode [OneSided|TwoSidedLongEdge|TwoSidedShortEdge]` |
| Color vs. grayscale default | Standard printer policy setting | LOW | `Set-PrintConfiguration -Color $true/$false` |
| Paper size default | Required for most environments (A4 vs Letter conflict is a common complaint) | LOW | `Set-PrintConfiguration -PaperSize [A4|Letter|...]` — large enum, expose only common values |
| Printer persistence across sessions | MSPs configure many printers; losing config between sessions is unacceptable | MEDIUM | SQLite or flat-file storage on Docker volume; drivers stored in volume, config in DB |
| Client/tenant organization | MSPs manage dozens of clients; printers must be grouped | MEDIUM | Simple client label/folder — no RBAC needed since no auth; flat list with client filter |

### Differentiators (Competitive Advantage)

Features that justify building ImpTune instead of manually scripting. Not expected from raw scripts, but high value for the target user.

| Feature | Value Proposition | Complexity | Notes |
|---------|-------------------|------------|-------|
| INF file parsing for driver name auto-detection | Eliminates the #1 source of silent install failures (wrong driver name string) | MEDIUM | Parse INF `[Strings]` and `[Manufacturer]` sections to extract valid driver names; present as dropdown |
| SYSTEM vs. user context self-elevation in generated script | Intune runs as SYSTEM, user-invoked scripts need elevation — single script handles both | MEDIUM | Detect `[System.Security.Principal.WindowsIdentity]::GetCurrent()` + UAC re-launch; this is the most-cited pain point in community guides |
| Custom app icon embedding for Intune | Company Portal shows the icon; admins want printer-specific icons, not generic app icon | LOW | Accept PNG upload (256x256, max 750KB per Intune spec); embed in package metadata |
| Driver file size optimization hint | Manufacturer ZIPs are often 500MB+; only a fraction is needed | MEDIUM | After INF parse, flag which files are referenced vs. unused; suggest cleanup to reduce .intunewin size |
| One-click package re-generation | When IP or settings change, regenerate without re-uploading drivers | LOW | Decouple printer config (IP, name, settings) from driver storage; re-run generation against stored drivers |
| Collate default setting | Less common but occasionally required for multifunction devices | LOW | `Set-PrintConfiguration -Collate $true/$false` |
| Package naming convention enforcement | Generated filenames should be consistent (client_printer_vN.intunewin) | LOW | Prevents file management confusion on the MSP side |
| Intune install/uninstall command preview | Show the exact command strings before export, copyable | LOW | Saves the Intune portal upload step where commands must be typed manually |

### Anti-Features (Commonly Requested, Often Problematic)

| Feature | Why Requested | Why Problematic | Alternative |
|---------|---------------|-----------------|-------------|
| Direct Intune API push (auto-upload to tenant) | Saves the manual upload step | Requires per-tenant OAuth tokens, multi-tenant app registration, and ongoing credential management — turns a stateless tool into an identity-aware service; scope and security surface explode | Export package + show exact Intune portal steps; keep the tool stateless |
| Real-time printer status / monitoring | "See if the printer is online" seems useful | Requires network access to each client site, SNMP polling, ongoing agent or VPN — far outside the deployment packaging scope | Out of scope; use RMM or dedicated monitoring tools |
| User authentication / per-technician logins | Seems professional | Adds session management, password reset flow, and auth complexity; the tool runs on a private network where single-user access is the reality | Document that the tool is internal-only, recommend network-level access control (VPN, firewall) |
| Print server migration / export (Printbrm) | Some clients have print servers to migrate | Printbrm.exe output format is entirely different from the per-printer Win32 package workflow; supporting both creates a confusing dual-path UI | Separate future feature if validated; not v1 |
| Universal Print integration | Microsoft's cloud print service is growing | Requires Azure subscription, different deployment model (no drivers, CSP), different target persona — not the MSP TCP/IP printer workflow | Document as out-of-scope; Universal Print has its own provisioning tool |
| Mobile / tablet UI | Nice to have | Target users are at a workstation doing IT work; responsive design adds cost for zero validated demand | Desktop browser only; CSS can be clean without being mobile-optimized |
| Multi-language / localization | International MSPs might want this | Zero demand signal yet; adds ongoing maintenance overhead for every string in the UI | English only for v1 |
| Full audit log / deployment history | Compliance-minded requests | State management complexity; printers are reconfigured infrequently; MSPs already have Intune/RMM logs | Out of scope for v1 per PROJECT.md |

---

## Feature Dependencies

```
[Driver File Upload]
    └──requires──> [INF Parsing]
                       └──enables──> [Driver Name Dropdown]
                       └──enables──> [Driver File Optimization Hint]

[Printer Config Form]
    ├──requires──> [Driver Name Dropdown]  (needs driver to be uploaded first)
    ├──requires──> [IP / Hostname Input]
    └──requires──> [Print Settings] (duplex, color, paper size)

[PowerShell Script Generation]
    └──requires──> [Printer Config Form]  (all fields must be valid)
    └──requires──> [Driver File Upload]   (driver files embedded in package)

[Intune Package Export (.intunewin)]
    └──requires──> [PowerShell Script Generation]
    └──requires──> [Detection Script Generation]
    └──optionally-uses──> [Custom Icon Upload]

[NinjaRMM Package Export (ZIP)]
    └──requires──> [PowerShell Script Generation]
    └──independent-of──> [Detection Script Generation]  (NinjaRMM doesn't need Intune detection logic)

[Client/Tenant Organization]
    └──enhances──> [Printer Persistence]  (printers stored per client label)
    └──independent-of──> [Package Export]

[One-Click Regeneration]
    └──requires──> [Printer Persistence]
    └──requires──> [PowerShell Script Generation]
```

### Dependency Notes

- **Driver Name Dropdown requires INF Parsing:** Free-text driver name is the most common cause of silent deployment failure; parsing the INF to offer valid options is a prerequisite to a reliable tool, not a nice-to-have.
- **Detection Script requires exact Printer Name match:** The registry key checked at `HKLM\SYSTEM\CurrentControlSet\Control\Print\Printers\[Name]` must exactly match the `-Name` parameter in `Add-Printer`. The tool must use the same value in both generated scripts.
- **.intunewin export requires both install and detection scripts:** Intune Win32 apps require install command, uninstall command, and detection method — all three must be generated together.
- **NinjaRMM export is independent of detection logic:** NinjaRMM script execution does not use Intune detection rules; the ZIP just needs the install script and driver folder.

---

## MVP Definition

### Launch With (v1)

Minimum to validate the core value proposition: "generate a working deployment package in minutes."

- [ ] Driver file upload (ZIP containing INF + supporting files)
- [ ] INF parsing with driver name dropdown selection
- [ ] Printer config form: name, IP/hostname, port name (auto-suggested from IP)
- [ ] Print settings: duplex mode, color/mono, paper size (A4/Letter/Legal at minimum)
- [ ] PowerShell install script generation (pnputil staging + Add-PrinterPort + Add-PrinterDriver + Add-Printer + Set-PrintConfiguration)
- [ ] PowerShell uninstall script generation (Remove-Printer + Remove-PrinterDriver + Remove-PrinterPort)
- [ ] Detection script generation (registry-based, printer name match)
- [ ] Self-elevation logic in install script (SYSTEM detection + UAC re-launch for user context)
- [ ] .intunewin package export (AES-256 encrypted ZIP-in-ZIP, no IntuneWinAppUtil.exe dependency)
- [ ] NinjaRMM ZIP export (script + driver folder)
- [ ] Client/tenant label for printer organization
- [ ] Printer config persistence (SQLite on Docker volume)
- [ ] Single Docker container runtime

### Add After Validation (v1.x)

Add once the packaging workflow is validated by real MSP use:

- [ ] Custom icon upload for Intune package (256x256 PNG, 750KB max) — trigger: MSPs ask for it after using v1
- [ ] Driver file size optimization hints (unused file flagging) — trigger: users complain about large package sizes
- [ ] One-click package regeneration from saved config — trigger: users report re-uploading drivers repeatedly
- [ ] Intune command string preview panel — trigger: friction reported during Intune portal upload step
- [ ] Collate setting — trigger: user request

### Future Consideration (v2+)

Defer until product-market fit and real usage patterns emerge:

- [ ] Bulk printer import (CSV) — defer: unknown if MSPs manage dozens at once or one at a time
- [ ] Package version history per printer — defer: adds state complexity, low signal demand
- [ ] Print server migration path (Printbrm) — defer: different workflow, validate separately
- [ ] API / CLI mode for CI/CD integration — defer: advanced use case, no demand signal yet

---

## Feature Prioritization Matrix

| Feature | User Value | Implementation Cost | Priority |
|---------|------------|---------------------|----------|
| INF parsing + driver name dropdown | HIGH | MEDIUM | P1 |
| PowerShell script generation (install/uninstall/detection) | HIGH | MEDIUM | P1 |
| Self-elevation logic in generated script | HIGH | LOW | P1 |
| .intunewin package export | HIGH | HIGH | P1 |
| NinjaRMM ZIP export | HIGH | LOW | P1 |
| Driver file upload + storage | HIGH | MEDIUM | P1 |
| Printer config form (name, IP, settings) | HIGH | LOW | P1 |
| Client/tenant organization | MEDIUM | LOW | P1 |
| Printer persistence (SQLite) | MEDIUM | LOW | P1 |
| Custom icon upload | MEDIUM | LOW | P2 |
| Driver size optimization hints | MEDIUM | MEDIUM | P2 |
| One-click regeneration | MEDIUM | LOW | P2 |
| Intune command preview panel | LOW | LOW | P2 |
| Collate setting | LOW | LOW | P3 |
| Bulk CSV import | LOW | MEDIUM | P3 |

---

## Competitor Feature Analysis

| Feature | Manual scripting (status quo) | PrinterLogic / Vasion | ImpTune approach |
|---------|-------------------------------|----------------------|-----------------|
| Driver packaging | Manual — IT admin extracts files, writes pnputil commands | Serverless SaaS, no local driver packaging needed | Automated — upload ZIP, parse INF, bundle |
| Script generation | Manual — written per printer, error-prone | Not applicable (agent-based) | Generated from form inputs |
| Intune integration | Manual .intunewin wrapping + portal upload | Native Intune app provisioning | Export .intunewin; admin uploads to portal |
| NinjaRMM integration | Manual — custom script per RMM job | Not targeted | Export ZIP; admin pastes into NinjaRMM script |
| Multi-client support | Ad-hoc folder structure | Tenant-level in SaaS portal | Client label per printer, no auth overhead |
| Self-hosted / air-gapped | Possible but no tooling support | Cloud SaaS only | Single Docker container, fully self-hosted |
| Cost | Free (time is the cost) | Per-printer SaaS licensing (~$1-3/printer/month) | Self-hosted, no per-seat cost |
| Detection rules | Written manually, often wrong | N/A | Auto-generated, guaranteed consistent with install script |

---

## Sources

- MSEndpointMgr: Install Network Printers with Intune Win32 apps — https://msendpointmgr.com/2022/01/03/install-network-printers-intune-win32apps-powershell/
- Call4Cloud: Deploy Intune Printer Drivers (PnPutil/Printbrm) — https://call4cloud.nl/deploy-printer-drivers-intune-win32app/
- Microsoft Learn: Set-PrintConfiguration cmdlet — https://learn.microsoft.com/en-us/powershell/module/printmanagement/set-printconfiguration?view=windowsserver2025-ps
- GitHub (Sheeves11): intune-win32-print tool — https://github.com/Sheeves11/intune-win32-print
- GitHub (volodymyrsmirnov): IntuneWin library (C#) — https://github.com/volodymyrsmirnov/IntuneWin
- Stephan van Rooij: Creating IntuneWin files programmatically in C# — https://svrooij.io/2023/10/24/create-intunewin-file/
- GitHub (jeremy-leonard-gsi): intune-print-driver-deployment scripts — https://github.com/jeremy-leonard-gsi/intune-print-driver-deployment
- NinjaOne: Network Printer Setup with PowerShell — https://www.ninjaone.com/script-hub/network-printer-setup-powershell/
- Microsoft Learn: Add and Assign Win32 Apps to Intune — https://learn.microsoft.com/en-us/intune/intune-service/apps/apps-win32-add
- PrinterLogic driver management documentation — https://help.printerlogic.com/saas/Print/Print_Mgmt/Drivers_Profiles/Driver-Management.htm

---
*Feature research for: Printer deployment package generator (Intune + NinjaRMM)*
*Researched: 2026-04-10*
