Microsoft Intune: Distribuire driver e stampanti

Negli ambienti gestiti con Microsoft Intune, la distribuzione dei driver e stampanti può diventare spesso un punto abbastanza delicato quando i dispositivi Windows sono Microsoft Entra joined e la configurazione non viene più gestita tramite le Group Policy di dominio. Esistono tecnologie come Universal Print, che offre un modello cloud dedicato, con provisioning tramite Settings Catalog, ma non è sempre la scelta più adatta: possono incidere licenze, compatibilità dei dispositivi, architettura di rete, requisiti di stampa locali o semplicemente una migrazione non ancora pianificata. Il provisioning di Universal Print tramite Intune richiede infatti una configurazione dedicata e account con accesso al servizio e alle stampanti condivise.

In questi scenari è possibile distribuire driver e stampanti TCP/IP usando una Win32 app di Intune che contiene i file del driver e script PowerShell. L’app viene eseguita in contesto System, copia il driver nel Driver Store, registra il driver di stampa, crea la porta TCP/IP e aggiunge la coda locale sul dispositivo. In questa guida vedremo una procedura pulita, strutturata e adattata a un modello controllabile per ambienti enterprise.

L’obiettivo non è sostituire ogni soluzione di print management, ma l’approccio che descriverò è indicato quando serve distribuire una o più stampanti di rete raggiungibili direttamente dai client, senza usare Universal Print e senza delegare al client il download del driver da un print server. Nei contesti con print server, pull printing, badge release, regole complesse per sede o code utente dinamiche, suggerisco di valutare con attenzione se questo modello sia sufficiente o se sia preferibile usare una soluzione di stampa dedicata.

Disclaimer: la procedura è stata validata in laboratorio con una EPSON WF-2510 Series. Nomi delle code, indirizzi, gruppi e parametri devono essere adattati all’ambiente di destinazione. Prima del rollout è necessario verificare compatibilità e comportamento del driver sulla versione di Windows utilizzata.

Scenario di riferimento

Vediamo subito qual è lo scenario di questo articolo: la guida prende come riferimento una stampante di rete raggiungibile tramite indirizzo IP o DNS, installata sui dispositivi Windows come coda locale TCP/IP. Il driver viene distribuito insieme alla Win32 app, evitando che Windows debba scaricarlo da un print server o che l’utente debba installarlo manualmente. Nel nostro esempio useremo questi valori:

Elemento

Valore di esempio

Nome stampante

IT Floor 1 – EPSON WF-2510

Indirizzo IP stampante

192.168.0.126

Nome porta

IP_192.168.0.126

Nome driver

EPSON WF-2510 Series

File INF

.\Drivers\E_WF1IXE.INF

Porta TCP

9100

Gruppo pilota

INTUNE-WIN-PRINTERS-PILOT

Tabella 1: Parametri utilizzati nello scenario di esempio per la distribuzione della stampante

Chiaramente i valori indicati in tabella devono essere sostituiti con quelli reali dell’ambiente che gestite, inoltre fate attenzione al nome del driver: è particolarmente importante che corrisponda al nome con cui il driver viene registrato in Windows, non al nome commerciale della stampante e non necessariamente al nome del file INF.

Perché usare una Win32 app di Intune?

Le Win32 app sono il metodo più adatto per questo scenario perché consentono di distribuire una cartella contenente più file, eseguire comandi di installazione e disinstallazione, definire regole di rilevamento e monitorare l’esito dal portale Intune. Le app Win32 vengono elaborate dalla Microsoft Intune Management Extension, che viene installata automaticamente quando un’app Win32 o uno script PowerShell viene assegnato a un utente o a un dispositivo gestito.

Il pacchetto viene creato con Microsoft Win32 Content Prep Tool, che comprime la cartella sorgente in un file con estensione .intunewin. La cartella sorgente deve contenere tutti i file richiamati durante l’installazione, inclusi script, INF, CAT, CAB, DLL e altri file del driver. Lo strumento supporta i parametri -c, -s, -o e -q, utili per indicare cartella sorgente, file di setup, cartella di output e modalità non interattiva.

Componente

Funzione

Win32 app

Distribuisce il contenuto e gestisce installazione, disinstallazione, detection e monitoraggio

Driver package

Contiene INF, file CAT e file richiesti dal produttore

PowerShell

Esegue la logica di staging driver, creazione porta e aggiunta stampante

Detection rule

Verifica che la stampante sia presente con driver e porta attesi

Gruppo pilota

Limita il deployment iniziale a un insieme controllato di dispositivi

Tabella 2: Componenti utilizzati per distribuire driver e stampante tramite Win32 app

Quando scegliere questo approccio

Questo modello funziona bene quando le stampanti sono raggiungibili direttamente dai client e l’azienda vuole mantenere il controllo del driver installato sul dispositivo. Inoltre, è utile anche nei casi in cui gli utenti non devono avere privilegi locali e l’installazione deve avvenire in modo automatico o tramite Company Portal. Una soluzione come Universal Print rimane una soluzione cloud specifica per la stampa Microsoft 365 e dispone di un percorso di provisioning dedicato in Intune, ma questa guida affronta volutamente lo scenario senza Universal Print. Le aziende che usano Universal Print devono considerare anche licensing, condivisione delle stampanti e supporto dei client Windows previsti dalla documentazione del servizio. Se dovesse interessarvi questo servizio, trovate una guida pubblicata su ICT Power alla pagina Microsoft 365 – Gestione delle stampanti in cloud con Universal Print.

Scenario

Valutazione

Stampante TCP/IP diretta in sede

Scenario ideale per questa guida

Dispositivi Microsoft Entra joined senza GPO

Scenario adatto, perché la distribuzione passa da Intune

Stampante condivisa da print server

Possibile, ma richiede attenzione a Point and Print, driver e restrizioni di sicurezza

Universal Print già adottato

Conviene usare il provisioning dedicato nel Settings Catalog

Pull printing o badge release

Meglio verificare le indicazioni del vendor della soluzione di stampa

Driver non firmati o pacchetti incompleti

Scenario da evitare in produzione

Tabella 3: Scenari di utilizzo dell’approccio Win32 app per la distribuzione delle stampanti

Prerequisiti

Prima di creare il pacchetto separiamo per bene i prerequisiti tecnici da quelli operativi perché il rischio maggiore, in questi scenari, non è la creazione della Win32 app, ma la distribuzione di un driver incompleto, il riferimento a un nome driver errato o una detection rule troppo debole.

  • dal punto di vista Intune servono dispositivi Windows gestiti, una licenza Intune valida per gli utenti o i dispositivi interessati, un gruppo pilota e autorizzazioni amministrative sufficienti per creare e assegnare app. Per la gestione ordinaria è preferibile usare ruoli Intune con il principio del privilegio minimo, come ruoli built-in o ruoli custom, evitando l’uso continuativo di Global Administrator o Intune Administrator per attività di routine
  • dal punto di vista Windows servono un driver compatibile con la versione e l’architettura del sistema operativo, un pacchetto completo con INF, CAT e tutti i file referenziati dal driver, una stampante raggiungibile in rete e un nome porta stabile. Se si usa l’indirizzo IP, l’indirizzo deve essere statico o riservato a livello DHCP. Se si usa un nome DNS, la risoluzione deve funzionare in modo affidabile per tutti i dispositivi assegnati
Prerequisito

Dettaglio

Dispositivi

Windows 11 gestiti da Microsoft Intune

Architettura

Driver coerente con l’architettura client, in genere x64

Driver

Pacchetto firmato e completo, scaricato dal produttore

Rete

Client in grado di raggiungere la stampante sulla porta di stampa prevista

Intune

Possibilità di creare e assegnare Win32 app

Gruppi

Gruppo pilota dedicato prima del rollout esteso

Test

Almeno un dispositivo di laboratorio con lo stesso build branch usato in produzione

Tabella 4: Prerequisiti tecnici e operativi per il deployment della stampante tramite Intune

Attenzione: Windows 10 22H2 può ancora essere gestito da Intune, ma è fuori supporto generale dal 14 ottobre 2025 e la funzionalità non è garantita; verificare separatamente eventuali scenari LTSC o ESU.

Come funziona l’installazione del driver

Windows non installa un driver partendo da un file INF isolato se mancano i file dichiarati nel pacchetto. Il Driver Store contiene i pacchetti driver validati e tutti i file richiamati dall’INF; se il file INF referenzia un componente non presente, il pacchetto non viene copiato nello store. Lo staging del driver e l’installazione del dispositivo sono operazioni distinte, quindi il driver deve prima essere reso disponibile nel Driver Store e poi registrato come driver di stampa.

Il comando PnPUtil consente di aggiungere pacchetti driver al Driver Store con la sintassi pnputil /add-driver <filename.inf>. Lo strumento è incluso in Windows e il parametro /add-driver aggiunge il pacchetto nello store; il parametro /install serve invece per installare o aggiornare il driver su dispositivi corrispondenti, ma per la coda di stampa TCP/IP di questa guida useremo lo staging del pacchetto e poi i cmdlet del modulo PrintManagement.

Dopo lo staging del driver, la procedura usa tre cmdlet PowerShell:

Cmdlet

Funzione

Add-PrinterDriver

Registra il driver di stampa sul computer locale. Richiede privilegi amministrativi

Add-PrinterPort

Crea una porta locale, TCP/IP o LPR. Nel nostro scenario crea la porta TCP/IP della stampante

Add-Printer

Aggiunge la stampante usando il nome driver e la porta già presenti

Tabella 5: Cmdlet PowerShell utilizzati per registrare il driver, creare la porta e aggiungere la stampante

Add-PrinterDriver installa un driver di stampa sul computer specificato e richiede credenziali amministrative, mentre Add-Printer consente di aggiungere una stampante locale o una connessione a stampante di rete. Add-PrinterPort supporta la creazione di porte TCP/IP specificando nome porta e indirizzo della stampante.

Preparare la cartella sorgente

Fatte le dovute premesse, vediamo come predisporre il tutto. Il primo passaggio consiste nello scaricare il driver dal sito del produttore ed estrarre il pacchetto in una cartella di lavoro. In molti casi il file scaricato contiene un installer grafico (il classico setup.exe), ma per una distribuzione tramite Intune è preferibile individuare i file effettivi del driver e installarli in modo silenzioso con PowerShell; in questo caso estraiamo i driver dal setup in un percorso comodo per lavorare.

Di seguito vi lascio l’esempio di struttura che utilizzerò per questa guida: la cartella Source conterrà lo script di installazione, lo script di disinstallazione e la sottocartella Drivers con tutti i file del driver. La cartella Output, utilizzata per salvare il file .intunewin, va invece mantenuta fuori da Source, come mostrato nella Figura 1 seguente. Gli script di installazione, disinstallazione e di detection potete trovarli nei capitoli successivi.

Figura 1: Struttura delle cartelle utilizzate per preparare il pacchetto Win32 della stampante

Il file INF va aperto e controllato prima del packaging, in particolare bisogna verificare quali file vengono richiamati, quale file CAT è associato al pacchetto e quale nome driver sarà disponibile in Windows dopo l’installazione.

Figura 2: Verifica del file INF per identificare le informazioni del driver prima della distribuzione con Intune

In alternativa, su una macchina di laboratorio, si può installare manualmente il driver e poi leggere il nome esatto con PowerShell:

Get-PrinterDriver | Sort-Object Name | Select-Object Name, Manufacturer, DriverVersion

Figura 3: Identificazione del nome esatto del driver EPSON WF-2510 Series tramite PowerShell

Se il nome del driver non corrisponde, Add-PrinterDriver può fallire anche quando pnputil.exe ha aggiunto correttamente il pacchetto al Driver Store, e questo è uno degli errori più frequenti nelle distribuzioni di stampanti via Intune.

Attenzione: non rinominare, spostare o rimuovere file dal pacchetto driver dopo aver identificato l’INF. Se il file INF fa riferimento a un file non presente nella cartella distribuita, lo staging nel Driver Store può fallire o produrre un’installazione incompleta.

Figura 4: Contenuto della cartella Source del pacchetto Win32 della stampante

Figura 5: Struttura della cartella Drivers per il pacchetto Win32 della stampante

Script di installazione

Per questo scenario ho pubblicato sul mio repository GitHub tre script PowerShell per gestire l’installazione, la disinstallazione e il rilevamento delle stampanti tramite Microsoft Intune. Gli script sono progettati per essere riutilizzati con stampanti di produttori e modelli differenti, personalizzando i parametri relativi al driver, all’indirizzo IP e alla coda di stampa. Nel file README.md della cartella PrinterDrivers trovate gli script, i prerequisiti, le istruzioni per adattarli al vostro ambiente e i passaggi necessari per creare e distribuire il pacchetto Win32 con Intune.

Per semplicità vi riporto qui una versione ridimensionata per l’articolo: lo script seguente installa una stampante TCP/IP locale. Prima verifica il file INF, aggiunge il driver al Driver Store con pnputil.exe, registra il driver di stampa, crea la porta TCP/IP se non esiste e aggiunge la stampante. Se trova una stampante con lo stesso nome ma con driver o porta diversi, la rimuove e la ricrea con i valori attesi. Il log viene scritto in C:\ProgramData\EndpointNinja\PrinterDeployment, così può essere letto anche quando l’installazione viene eseguita in contesto System da Intune.

Attenzione: come vedremo più avanti, per evitare problemi di reindirizzamento tra PowerShell a 32 bit e 64 bit, il comando di installazione della Win32 app userà SysNative, così lo script verrà eseguito nella PowerShell a 64 bit anche quando viene lanciato da un processo a 32 bit.

Attenzione: se esiste già una stampante con lo stesso nome ma con driver o porta differenti, lo script la rimuove e la ricrea. Prima del rollout verificare l’impatto su eventuali processi di stampa in coda e configurazioni specifiche della stampante.

Script di disinstallazione

Anche per la disinstallazione trovate i riferimenti su GitHub, mentre qui vi lascio una versione semplificata per lo scenario. Lo script di rimozione elimina la stampante e, se richiesto, anche la porta TCP/IP quando non è più usata da altre stampanti. Il driver viene lasciato installato per impostazione predefinita, perché potrebbe essere condiviso da altre code di stampa o da stampanti dello stesso modello.

Attenzione: lo script non rimuove automaticamente il driver dopo la disinstallazione della coda, perché lo stesso driver potrebbe essere utilizzato da altre stampanti. La rimozione del driver va gestita dopo aver verificato che non sia più in uso.

Creare il pacchetto .intunewin

Dopo aver preparato la cartella sorgente, si può creare il pacchetto con IntuneWinAppUtil.exe. Il parametro -c indica la cartella sorgente, -s il file di setup di riferimento, -o la cartella di output e -q esegue il comando in modalità non interattiva. Tutti i file e le sottocartelle presenti nella cartella sorgente vengono compressi nel pacchetto .intunewin.

Esempio:

Il file generato sarà caricato nel portale Intune come Windows app (Win32).

Figura 6: Creazione del pacchetto .intunewin con Microsoft Win32 Content Prep Tool

Figura 7: Pacchetto .intunewin generato per la distribuzione del driver e della stampante tramite Intune

Creare la Win32 app in Microsoft Intune

Adesso che abbiamo tutti gli elementi a disposizione, possiamo creare la nuostra app in. Apriamo il Microsoft Intune admin center e nel portale apriamo Apps > All Apps e creiamo una nuova app tramite l’apposito pulsante Create. Nel pannello Select app type selezioniamo la piattaforma Windows e
Windows app (Win32) come tipo di app e proseguire con il pulsante Select.

Figura 8: Selezione di Windows app (Win32) durante la creazione dell’applicazione in Intune

Nella sezione App information caricare il file .intunewin generato nei passaggi precedenti e completare le informazioni dell’applicazione con un nome chiaro, ad esempio Printer – IT Floor 1 – EPSON WF-2510. Il nome deve permettere di capire rapidamente sede, piano, modello o funzione della stampante, soprattutto quando il tenant contiene molte code.

Figura 9: Caricamento del pacchetto Install-Printer.intunewin nella Win32 app

Dopo aver compilato i campi richiesti, proseguiamo con il pulsante Next.

Figura 10: Configurazione delle informazioni della Win32 app per la stampante

Nella sezione Program configurare i comandi di installazione e disinstallazione. L’esecuzione deve avvenire in contesto System, perché l’installazione del driver richiede privilegi amministrativi e non deve dipendere dai privilegi dell’utente connesso.

Comando di installazione:

Comando di disinstallazione:

Impostazioni consigliate nella sezione Program:

Impostazione

Valore consigliato

Install command

Comando PowerShell di installazione con SysNative

Uninstall command

Comando PowerShell di disinstallazione

Install behavior

System

Device restart behavior

No specific action, salvo driver che richiedono reboot nei test

Return codes

Mantenere 0 come successo e gestire eventuali codici specifici emersi nel pilota

Tabella 6: Impostazioni della sezione Program della Win32 app

Dopo aver compilato i campi necessari, possiamo proseguire facendo click sul pulsante Next.

Figura 11: Configurazione dei comandi di installazione e disinstallazione nella sezione Program

Nella sezione Requirements selezionare l’architettura e la versione minima di Windows coerenti con il driver. Per ambienti moderni, il requisito più comune sarà 64-bit e una versione minima allineata allo standard aziendale. Evitare di distribuire lo stesso driver a dispositivi con versioni di Windows non testate. Una volta definiti i requirements, proseguiamo con Next.

Figura 12: Configurazione dei requisiti della Win32 app

Detection rule

La detection rule deve confermare che la stampante sia realmente installata con il driver e la porta attesi. Una semplice chiave di registro può bastare in scenari molto lineari, ma una detection PowerShell è più precisa perché consente di verificare il nome della stampante, il driver, il nome della porta, l’indirizzo configurato e il numero di porta TCP. Per questa guida, creare un file Detect-Printer.ps1 con il contenuto seguente e usarlo come custom detection script nella Win32 app (trovate anche questo su GitHub):

Quando si usa uno script di detection per una Win32 app, lo script deve restituire un esito in linea con le regole di Intune: un codice di uscita diverso da zero indica errore o applicazione non rilevata; con codice 0 e output su STDOUT, l’app viene considerata installata. In alternativa, si può usare una detection rule di tipo Registry:

Campo

Valore

Rule type

Registry

Key path

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\IT Floor 1 – EPSON WF-2510

Value name

lasciare vuoto

Detection method

Key exists

Associated with a 32-bit app on 64-bit clients

No

Tabella 7: Detection rule alternativa basata sulla presenza della chiave di registro della stampante

La detection via registro è più semplice, ma non conferma che la porta e il driver siano quelli corretti. Per questo motivo, negli ambienti dove si aggiornano driver o si riutilizzano nomi stampante già esistenti, è preferibile usare lo script. Una detection rule troppo generica può far risultare installata una stampante configurata in modo errato. Per i deployment in produzione è consigliabile verificare almeno nome stampante, nome driver e nome porta.

Ad ogni modo, dopo aver completato la pagina di Detection rules, possiamo proseguire con Next.

Figura 13: Configurazione dello script PowerShell come custom detection rule

Assegnazione e pilota

Le tab Dependencies, Supersedence e Scope Tags non sono importanti per lo scopo di questa guida, quindi passiamo direttamente alla pagina di Assignments.
La prima assegnazione dovrebbe essere limitata a un gruppo pilota di dispositivi. La distribuzione Required è indicata quando la stampante deve essere installata automaticamente; la distribuzione Available è utile quando si vuole lasciare agli utenti la scelta dal Company Portal, tenendo conto del comportamento previsto nel proprio tenant e del tipo di gruppo usato. Una sequenza di rollout ragionevole prevede prima un dispositivo di laboratorio, poi alcuni dispositivi IT, quindi un gruppo ristretto della sede interessata e infine il resto dei dispositivi. Questo modello riduce il rischio di distribuire un driver errato o una coda non raggiungibile a un numero elevato di utenti.

Fase

Destinatari

Obiettivo

Lab

1-2 dispositivi controllati

Validare driver, script, detection e uninstall

Pilot IT

Team IT o help desk

Verificare installazione reale e stampa di prova

Pilot sede

Piccolo gruppo utenti

Confermare comportamento su rete e profili utente reali

Produzione

Dispositivi della sede

Estendere il deployment dopo la validazione

Tabella 8: Fasi consigliate per il test e il rollout della stampante

Come indicato nella Tabella 1 del capitolo Scenario di riferimento, per questa demo utilizzeremo un gruppo pilota chiamato INTUNE-WIN-PRINTERS-PILOT e faremo un’assegnazione di tipo Required. Dopo aver incluso il gruppo, possiamo proseguire con il pulsante Next.

Figura 14: Assegnazione della Win32 app al gruppo pilota con intent Required

Dopo l’assegnazione verifichiamo nella sezione Review + create che tutte le informazioni siano state impostate correttamente, quindi procedere alla creazione dell’applicazione con l’apposito pulsante Create.

Figura 15: Verifica della configurazione nella pagina Review + create

Verifica lato client

Dopo l’installazione, la verifica va eseguita sia dal lato Intune sia direttamente sul dispositivo Windows. Nel Microsoft Intune admin center è possibile aprire Apps > All Apps, selezionare la Win32 app che abbiamo creato e verificare lo stato dalla sezione Monitor, utilizzando in particolare Device install status per controllare l’esito sui singoli dispositivi. Lo stato Installed conferma che Intune ha ricevuto un risultato di installazione e detection positivo per il dispositivo.

Se il primo controllo serve a confermare che la Win32 app sia stata distribuita correttamente, sul client è necessario invece verificare che siano presenti driver, porta TCP/IP e coda di stampa. Un primo riscontro può arrivare dal Portale aziendale (o Company Portal), nella sezione Download e aggiornamenti, dove l’applicazione può risultare installata con lo stato previsto. Questo controllo è utile per confermare che il deployment sia stato ricevuto dal dispositivo, ma non è sufficiente da solo a dimostrare che la stampante sia stata configurata correttamente.

PowerShell

Per la verifica tecnica partirei da PowerShell, i seguenti comandi permettono di controllare la presenza della stampante, della porta e del driver:

Se i valori restituiti corrispondono a quelli attesi, il dispositivo ha ricevuto correttamente gli elementi principali della configurazione. In particolare, la stampante deve risultare associata alla porta IP_192.168.0.126 e al driver EPSON WF-2510 Series. Quando si vuole verificare anche la raggiungibilità della stampante sulla rete, è utile aggiungere un controllo TCP verso la porta di stampa:

Se il risultato mostra TcpTestSucceeded : True, il client riesce a raggiungere la stampante sulla porta prevista. Questo test non sostituisce la prova di stampa, ma aiuta a distinguere i problemi di packaging o configurazione dai problemi di rete.

Console Gestione Stampa

Oltre ai controlli da riga di comando, è utile una verifica grafica tramite printmanagement.msc, quando disponibile. Nella console Gestione stampa è possibile confermare in modo immediato:

  • la presenza del driver nella sezione Driver
  • la presenza della coda nella sezione Stampanti
  • la corrispondenza tra nome stampante e driver associato

Figura 16: Verifica del driver EPSON WF-2510 Series nella console Gestione stampa

Figura 17: Verifica della coda IT Floor 1 – EPSON WF-2510 nella console Gestione stampa

Questa verifica è particolarmente utile durante il collaudo, perché consente di confrontare rapidamente lo stato del sistema prima e dopo il deployment.

Registro di Sistema

Come controllo aggiuntivo, si può verificare anche la presenza della chiave di registro della stampante al percorso HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers. All’interno della chiave è possibile controllare almeno i valori Name, Port e Printer Driver. Questa verifica è utile per troubleshooting o per validare una detection rule alternativa basata sul registro, ma non dovrebbe essere considerata l’unico controllo di corretto funzionamento.

Figura 18: Verifica nel registro della configurazione della stampante distribuita tramite Intune

Windows Settings

Per un riscontro lato interfaccia utente, si può infine controllare la presenza della stampante in Settings > Bluetooth & devices > Printers & scanners. Anche in questo caso, la presenza della coda conferma che la stampante è visibile al sistema, ma la validazione completa richiede comunque il controllo di driver, porta e connettività.

Figura 19: Verifica della presenza della stampante nelle impostazioni di Windows

Logs

Per la parte dei log potete approfondire alla pagina Microsoft Intune Management Extension logs: guida pratica al troubleshooting, ed i file locali della Microsoft Intune Management Extension si trovano in C:\ProgramData\Microsoft\IntuneManagementExtension\Logs. Per le Win32 app, i file più utili sono:

  • IntuneManagementExtension.log
  • AppWorkload.log
  • AppActionProcessor.log

Nel caso del nostro scenario è disponibile anche un log dedicato generato dagli script utilizzati, che potete trovare al percorso C:\ProgramData\EndpointNinja\PrinterDeployment (potete modificare il percorso a vostro piacimento)
e consente di capire se l’errore riguarda il file INF, il nome del driver, la creazione della porta TCP/IP oppure l’aggiunta della stampante.

Figura 20: Verifica del log generato dallo script di installazione della stampante

Infine, per concludere la validazione, dopo i controlli tecnici è consigliabile eseguire anche una stampa di prova, così da confermare non solo la presenza della coda, ma anche l’effettiva funzionalità della stampante dal dispositivo gestito.

Troubleshooting

Quando la distribuzione non produce il risultato atteso, è utile individuare in quale fase si interrompe il processo: esecuzione della Win32 app, staging del driver, registrazione del driver di stampa, creazione della porta TCP/IP, aggiunta della coda oppure detection finale. Gli script utilizzati in questa guida scrivono le operazioni eseguite nel log dedicato, che può quindi essere confrontato con i log della Microsoft Intune Management Extension.

Nella tabella seguente ho sintetizzato i principali problemi che possono verificarsi durante il deployment di driver e stampanti tramite Microsoft Intune, indicando per ciascun sintomo le possibili cause, i controlli da eseguire e le azioni consigliate per il troubleshooting:

Sintomo

Possibile causa

Controllo

Azione consigliata

La Win32 app risulta Failed Lo script ha restituito un codice diverso da 0 Controllare AppWorkload.log, AppActionProcessor.log e il log in C:\ProgramData\EndpointNinja\PrinterDeployment (o equivalente, se lo avete modificato) Individuare l’ultima operazione completata nel log e verificare il relativo errore PowerShell prima di ripetere il test su un dispositivo pilota
La Win32 app non viene eseguita o non arriva al dispositivo Problema di assignment, Microsoft Intune Management Extension non operativa o dispositivo che non ha ancora effettuato il check-in Verificare assignment, stato del servizio IntuneManagementExtension e IntuneManagementExtension.log Confermare che il dispositivo rientri nell’assegnazione e che IME sia installata e in esecuzione, quindi effettuare un nuovo check-in
Lo script restituisce Driver INF file not found Percorso indicato in -InfFile errato oppure file non incluso nel pacchetto .intunewin Verificare che il file indicato esista in Source\Drivers prima del packaging Correggere il percorso relativo, ricreare il pacchetto .intunewin e caricare la nuova versione della Win32 app
pnputil.exe fallisce Pacchetto driver incompleto, INF non valido, file referenziati mancanti o problema di firma/compatibilità Verificare INF, CAT e tutti i file del driver nella cartella Drivers; ripetere pnputil /add-driver da una console elevata su un dispositivo pilota Scaricare nuovamente il pacchetto dal produttore e mantenere tutti i file richiesti dall’INF. PnPUtil aggiunge il pacchetto al Driver Store tramite /add-driver
Add-PrinterDriver fallisce Driver non correttamente staged, nome driver errato oppure Print Spooler non operativo Eseguire Get-PrinterDriver, confrontare il nome con quello dichiarato nell’INF e controllare Get-Service Spooler Correggere -DriverName con il nome esatto e verificare che il driver sia presente nel Driver Store e che il servizio Spooler sia in esecuzione. Add-PrinterDriver richiede privilegi amministrativi
Lo script restituisce Existing printer port configuration does not match Esiste già una porta con lo stesso nome, ma associata a un altro IP o numero TCP Get-PrinterPort -Name “<nome-porta>” | Format-List Name, PrinterHostAddress, PortNumber Verificare se la porta è utilizzata da altre code. Se la porta è obsoleta e non è più necessaria, rimuoverla oppure utilizzare un nome porta differente prima di rieseguire l’installazione
Add-PrinterPort fallisce Nome porta già in uso, indirizzo non valido oppure configurazione della porta non compatibile Controllare Get-PrinterPort e i parametri PrinterHostAddress e PortNumber Correggere nome, indirizzo o porta TCP prima di rieseguire l’installazione. Add-PrinterPort supporta la creazione di porte TCP specificando indirizzo e numero di porta
Add-Printer fallisce Driver o porta richiesti non sono disponibili oppure esiste una configurazione locale incompatibile Verificare separatamente Get-PrinterDriver e Get-PrinterPort Correggere prima driver e porta; solo successivamente ripetere la creazione della coda. Add-Printer utilizza i valori specificati tramite DriverName e PortName
La stampante viene creata ma non stampa IP/DNS errato, stampante non raggiungibile, porta TCP bloccata, routing/VLAN/firewall oppure configurazione della stampante non corretta Eseguire Test-NetConnection <IP> -Port 9100 e una stampa di prova Correggere connettività, DNS/IP, firewall o configurazione della stampante. Un test TCP positivo dimostra la raggiungibilità della porta, non l’effettiva riuscita della stampa
La stampante continua a reinstallarsi oppure Intune la segnala come non rilevata Lo script di detection non trova uno dei valori attesi Eseguire manualmente Detect-Printer.ps1 e confrontare PrinterName, DriverName, PortName, PrinterHostAddress e PortNumber Allineare le variabili dello script di detection ai valori effettivamente creati dallo script di installazione
La stampante è presente ma la detection Registry fallisce Percorso della chiave errato oppure detection configurata su un valore non previsto Verificare HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\<nome stampante> Correggere il percorso della detection. Se si vuole verificare solo la presenza della coda, configurare la detection sulla presenza della chiave
L’utente non vede la stampante Installazione non completata, coda non presente o servizio Print Spooler non operativo Verificare Get-Printer e Get-Service Spooler Controllare stato della Win32 app e detection; se necessario effettuare un nuovo check-in IME e verificare nuovamente la coda
Il driver è presente ma la stampante scompare o non può essere utilizzata Windows Protected Print Mode attivo e driver di terze parti non compatibile con tale modalità Controllare lo stato di Windows Protected Print Mode sul dispositivo Verificare se il modello può utilizzare IPP/Mopria oppure disabilitare WPP solo se compatibile con i requisiti di sicurezza dell’organizzazione
La disinstallazione fallisce con un errore relativo alla porta Il PortName passato allo script non corrisponde alla porta associata alla stampante Get-Printer -Name “<nome stampante>” | Format-List Name, PortName Allineare il parametro -PortName alla porta effettivamente associata alla stampante. In alternativa, omettere -PortName: se la coda esiste, lo script ricava automaticamente il nome della porta dalla configurazione della stampante
La stampante viene rimossa ma la porta rimane presente La porta è ancora utilizzata da un’altra coda oppure -RemovePort non è stato specificato Get-Printer | Where-Object { $_.PortName -eq “<nome-porta>” } Verificare che nel comando di disinstallazione sia presente -RemovePort e che nessun’altra stampante utilizzi la stessa porta. Lo script rimuove la porta solo quando non è più associata ad altre code
Problemi con una stampante condivisa da print server Restrizioni Point and Print, driver non presente localmente o policy che limitano l’installazione dei driver Controllare criteri di stampa, driver installati e RestrictDriverInstallationToAdministrators Usare driver preinstallati e server approvati; evitare di disabilitare indiscriminatamente le protezioni Point and Print. Per impostazione predefinita, Windows limita ai membri Administrators l’installazione dei driver di stampa

Tabella 9: Troubleshooting del deployment di driver e stampanti tramite Microsoft Intune

Stampanti condivise da print server

La guida è orientata alle stampanti TCP/IP dirette, ma in alcuni ambienti esistono ancora print server Windows con code condivise. PowerShell supporta anche l’aggiunta di una stampante di rete tramite Add-Printer -ConnectionName \\printServer\printerName, ma questo scenario introduce dipendenze diverse: autenticazione, raggiungibilità del server, driver disponibili sul client, Point and Print e relative restrizioni di sicurezza.

Le impostazioni Point and Print sono gestibili anche via CSP e includono criteri come PointAndPrintRestrictions e RestrictDriverInstallationToAdministrators. Disabilitare o allentare queste restrizioni per risolvere rapidamente un problema di installazione driver può aumentare il rischio operativo e va evitato senza una valutazione di sicurezza.

Quando si usano print server, è preferibile mantenere una linea chiara: driver firmati, server approvati, configurazioni coerenti tra client e server, test su dispositivi non amministrativi e documentazione delle eccezioni. Se l’obiettivo è eliminare la dipendenza dai driver di terze parti sui client, occorre valutare scenari IPP, Windows Protected Print Mode o Universal Print, sapendo che la modalità di stampa protetta di Windows limita l’uso di driver di terze parti e cambia il modello legacy di stampa.

Attenzione: non usate la distribuzione Intune come pretesto per disabilitare in modo generalizzato le restrizioni Point and Print. Se l’ambiente richiede print server e driver legacy, la configurazione deve essere valutata insieme ai requisiti di sicurezza dello spooler e alle policy di stampa già applicate ai client.

Gestione di più stampanti e aggiornamento dei driver

Se l’ambiente contiene poche stampanti, un pacchetto per ciascuna coda è semplice da gestire, quando invece molte stampanti condividono lo stesso driver può essere molto più conveniente separare il pacchetto driver dalla creazione della coda. In questo modello, la Win32 app del driver viene installata come dipendenza e le singole app delle stampanti si limitano a creare porta e coda.

Modello

Quando usarlo

Vantaggio

Limite

Pacchetto unico driver + stampante

Poche stampanti o sedi semplici

Facile da distribuire e rimuovere

Duplica il driver in più pacchetti

Driver separato + app per stampante

Molte stampanti con driver comune

Riduce duplicazione e semplifica aggiornamenti

Richiede dipendenze e governance più accurata

Script con CSV

Molte stampanti per sede

Permette configurazioni multiple in un solo pacchetto

Detection e rollback diventano più complessi

Tabella 10: Modelli di packaging per ambienti con più stampanti

Per aggiornare un driver, non conviene sovrascrivere file nella cartella del Driver Store. Il driver va distribuito come nuovo pacchetto, con una Win32 app aggiornata e una propria detection rule. Nei casi più delicati, è preferibile rimuovere e ricreare la coda con il nuovo driver durante una finestra controllata (evitando modifiche massive durante l’orario di lavoro).

Sicurezza e limiti

La distribuzione di driver di stampa è una modifica a livello dispositivo e deve essere trattata come tale. I driver devono provenire da fonti attendibili, devono essere firmati e devono essere testati su un campione rappresentativo di dispositivi. Anche se lo script viene eseguito in contesto System, non elimina i controlli di integrità del driver e non risolve problemi di compatibilità del pacchetto.

Occorre inoltre considerare il ciclo di vita dello spooler e delle tecnologie di stampa in Windows. Le funzionalità più moderne, come la stampa IPP e Windows Protected Print Mode, puntano a ridurre la dipendenza dai driver legacy di terze parti, mentre gli ambienti che mantengono driver tradizionali devono continuare a gestire patching, compatibilità, restrizioni e test di regressione.

Va inoltre considerata l’evoluzione del modello di stampa di Windows: dal 15 gennaio 2026, per Windows 11 e Windows Server 2025 e versioni successive, non vengono più pubblicati nuovi driver di stampa tramite Windows Update; dal 1° luglio 2026 il ranking dei driver privilegia il driver IPP incluso in Windows. I driver forniti direttamente dai produttori possono continuare a essere installati mediante pacchetti separati, come avviene nella procedura descritta in questa guida, ma per nuovi progetti è opportuno verificare anche la disponibilità di stampa IPP/Mopria e il ciclo di vita del driver legacy utilizzato. Potete trovare maggiori informazioni alla pagina ufficiale Microsoft End of servicing plan for third-party printer drivers on Windows.

Limite

Impatto

Driver specifici del produttore

Ogni modello può richiedere file, parametri e test diversi

Aggiornamenti driver

Non esiste aggiornamento automatico universale: va gestito con nuove app o supersedence

Rete locale

La stampa dipende dalla raggiungibilità della stampante dai client

Detection

Una detection debole può nascondere configurazioni errate

Print server

Le code condivise richiedono considerazioni aggiuntive su Point and Print e policy

Esperienza utente

La stampante viene distribuita in base agli assignment, non in base alla posizione reale dell’utente se non si progettano gruppi o filtri adeguati

Tabella 11: Principali limiti operativi della distribuzione delle stampanti tramite Win32 app

Attenzione: questa procedura non è compatibile con una configurazione in cui Windows Protected Print Mode impedisce l’uso del driver di terze parti richiesto dalla stampante. Quando la modalità è attiva, le stampanti che utilizzano driver di terze parti vengono rimosse e tali driver non possono essere utilizzati finché la modalità resta abilitata.

Conclusioni

Distribuire driver e stampanti con Microsoft Intune senza Universal Print è una soluzione praticabile quando l’obiettivo è installare code TCP/IP locali su dispositivi Windows gestiti. Il modello funziona bene se viene trattato come un normale processo di packaging: driver completo, script idempotente, detection robusta, gruppo pilota, log leggibili e rollout graduale.

La parte più importante resta la validazione del driver: se il pacchetto del produttore è incompleto, se il nome driver non è corretto o se la detection controlla solo la presenza superficiale della stampante, Intune può distribuire il contenuto correttamente ma il risultato sul client può non essere utilizzabile. Con una struttura pulita e controlli lato client ben definiti, invece, la Win32 app diventa un metodo affidabile per gestire le stampanti tradizionali anche in ambienti cloud-first.