docs: complete project research

Adds STACK, FEATURES, ARCHITECTURE, PITFALLS, and SUMMARY research files
covering the full ImpTune technology stack, feature set, architecture
patterns, and critical pitfalls for the printer deployment package generator.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-10 10:34:25 +02:00
co-authored by Claude Sonnet 4.6
parent 67a54673e2
commit 59c384ed13
4 changed files with 1026 additions and 0 deletions
+200
View File
@@ -0,0 +1,200 @@
# 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*