Gestion avancée des imprimantes réseau avec printui.dll et PowerShell

Dernière mise à jour: 29/10/2025
Auteur: Isaac
  • PrintUIEntry vous permet d'installer et de lister les connexions globales par ordinateur ; combinez-le avec PowerShell et l'inscription à l'audit sans interface graphique.
  • WMI et WScript.Network gèrent le mappage, le listage et les valeurs par défaut ; l’inventaire IP est résolu par des requêtes sur les ports TCP/IP.
  • Déployez des serveurs d'impression à l'aide de PowerShell avec des pilotes, des ports et des files d'attente partagées reproductibles.
  • UniversalPrintManagement ajoute la gestion du cloud avec des cmdlets, des autorisations, des connecteurs, des tâches et des rapports avec une pagination robuste.

Gestion des imprimantes réseau avec PowerShell

Pour gérer un réseau d'imprimantes sous Windows , l'utilisation conjointe de printui.dll et de PowerShell est une stratégie efficace. Cependant, au quotidien, on rencontre parfois des situations inattendues : des connexions par ordinateur avec l'option /ga qui n'apparaissent pas dans les cmdlets habituelles, des erreurs 740 lors de l'installation depuis des comptes standard et des listes qui ne s'affichent que dans une fenêtre graphique. Ce guide pratique et complet vous permettra de simplifier la gestion de ces imprimantes.

Tout ce que vous trouverez ci-dessous est axé sur les plateformes Windows , avec des exemples de configuration fonctionnant aussi bien côté client que côté serveur et offrant une excellente évolutivité. Vous apprendrez tout, de la configuration et du mappage des imprimantes avec WMI ou l'objet COM WSH au déploiement d'un serveur d'impression avec PowerShell, incluant Universal Print et ses cmdlets modernes. Vous découvrirez également des solutions concrètes à des problèmes réels , comme la capture des connexions globales installées par PrintUI avec `/ga` ou le contournement des blocages UAC classiques.

PrintUIEntry : connexions par appareil, listes et erreurs courantes

Entrée PrintUI pour la gestion des imprimantes

Le moteur d'installation d'imprimante classique sous Windows expose le point d'entrée PrintUIEntry en printui.dllCela permet d'effectuer des actions telles que l'installation de files d'attente pour tous les utilisateurs de l'équipe. /ga, listez ces files d'attente avec /ge ou enregistrer silencieusement les contrôleurs et les connexions. Une commande de déploiement global typique serait : rundll32 printui.dll,PrintUIEntry /q /ga /n\\PRINTSERVER\PRINTERNAME, ce qui laisse que imprimante accessible à tous les utilisateurs Connectez-vous à cette machine.

Le problème se pose lors de la tentative d'inventaire de ces connexions. Des outils comme Get-Printer ou la classe WMI Win32_Printer n'affichent pas les imprimantes ajoutées avec l'option /ga , et la seule commande permettant de les lister est rundll32 printui.dll,PrintUIEntry /ge /c "\\ComputerName" . L'inconvénient est que cette liste s'affiche dans une fenêtre graphique ; pour des alternatives automatisées, consultez la procédure d'analyse des périphériques réseau , qui propose des méthodes de détection sans interface graphique.

Pour éviter les conflits UAC lors de l'installation de pilotes sur des postes de travail où l'utilisateur n'est pas administrateur, il existe une astuce utile : à partir d'un CMD élevé vous pouvez courir rundll32 printui.dll,PrintUIEntry /il. Avec ça enregistre le conducteur au niveau administrateur du système, et à partir de là, l'utilisateur pourra ajouter l'imprimante depuis les Paramètres ou le Panneau de configuration sans rencontrer le fameux erreur 740De nombreux techniciens ont rencontré ce message lors du déploiement de files d'attente de fabricants ; cette méthode résout généralement le problème (voir Dépannage des problèmes courants d'imprimante).

Pour automatiser l'inventaire des imprimantes installées avec l'option /ga sans utiliser l'interface graphique, une méthode pratique consiste à interroger les clés de registre système où Windows stocke les connexions pour chaque ordinateur. Vous pouvez effectuer cette opération à distance avec PowerShell et, à partir des noms récupérés, compléter les informations (pilote, port, etc.) en interrogeant le serveur d'impression correspondant. Si Windows ne détecte pas l'imprimante connectée, il est conseillé de combiner ces données avec des diagnostics locaux et distants pour mieux comprendre le problème. Voici un exemple de cette approche :

# Lee conexiones globales en un equipo remoto y devuelve nombre de servidor y cola
$computers = @("PC01","PC02")
Invoke-Command -ComputerName $computers -ScriptBlock {
    $key = "HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Print\\Connections"
    if (Test-Path $key) {
        Get-ChildItem $key | ForEach-Object {
            # Los subnombres suelen incluir \\Servidor,Impresora compartida
            $parts = $_.PSChildName -split ","
            @{
                Server   = $parts
                Printer  = if ($parts.Count -gt 1) { $parts } else { $null }
                Source   = "PrintUI /ga"
            }
        }
    }
}

Avec les paires Serveur/Imprimante Vous pouvez ensuite consulter le serveur d'impression pour extraire des données techniques telles que le pilote ou le port : Get-Printer -ComputerName PRINTSERVER -Name "PRINTERNAME" | Select-Object Name,DriverName,PortName,Shared,PublishedCe modèle permet de réaliser des audits complets des files d'attente installées à l'aide de PrintUI /ga sur des centaines d'ordinateurs, de manière reproductible.

  Méthodes pour supprimer les données de carte de crédit de l'iPhone

Administration avec PowerShell classique (WMI et WScript.Network)

WMI et WScript.Network pour les imprimantes

Pour lister les imprimantes visibles sur un ordinateur, la méthode la plus directe consiste à consulter la classe Imprimante Win32Dans PowerShell moderne, il est conseillé d'utiliser CIM : Get-CimInstance -ClassName Win32_PrinterVous aurez la queue. local et connecté par utilisateur avec des propriétés riches (qu'il s'agisse de la valeur par défaut, de la valeur partagée, etc.).

Une autre option est l'objet COM WSH WScript.Network, qui expose EnumPrinterConnections()Cette méthode renvoie une collection simple contenant des paires de nom du port et du périphérique Sans étiquettes, c'est un peu plus difficile à interpréter, mais efficace pour les scripts rapides : (New-Object -ComObject WScript.Network).EnumPrinterConnections().

Pour ajouter une imprimante réseau à un profil utilisateur, l'interface COM est très pratique. Il suffit d'appeler Ajouter une connexion d'imprimante Windows Alors: (New-Object -ComObject WScript.Network).AddWindowsPrinterConnection("\\\\Printserver01\\Xerox5")Si vous souhaitez modifier l'imprimante par défaut, vous pouvez le faire de deux manières : en localisant la file d'impression à l'aide de WMI, et en utilisant Définir l'imprimante par défautou dans le confort de WScript.Network.SetDefaultPrinter en transmettant le nom de l'imprimante, en suivant les étapes à Définissez votre imprimante par défaut.

# Establecer como predeterminada con WMI
$p = Get-CimInstance -ClassName Win32_Printer -Filter "Name='HP LaserJet 5Si'"
Invoke-CimMethod -InputObject $p -MethodName SetDefaultPrinter

# Establecer como predeterminada con WScript.Network
(New-Object -ComObject WScript.Network).SetDefaultPrinter('HP LaserJet 5Si')

Pour supprimer une connexion utilisateur, le même objet COM propose Supprimer la connexion de l'imprimante: (New-Object -ComObject WScript.Network).RemovePrinterConnection("\\\\Printserver01\\Xerox5"). Ce couple COM + WMI Il couvre la plupart des tâches de gestion de file d'attente « classiques » au niveau du profil et de l'équipe.

Lorsque vous souhaitez aller plus loin et inventorier les imprimantes connectées via des ports TCP/IP par adresse IP, une fonction utile est Obtenir-ImprimanteTCPIPL'idée est simple : consulter Win32_TCPIPPrinterPort pour obtenir les ports et, pour chacun d'eux, localiser l'imprimante associée dans Win32_PrinterLe résultat comprend des champs supplémentaires tels que Adresse IP du portSi elle répond au ping et à l'appareil d'origine. Cette fonction accepte Nom de l'ordinateur par le biais de canaux et d'identifiants alternatifs.

# Ejemplos de uso de Get-TCPIPPrinter (concepto)
Get-TCPIPPrinter                         # Equipo local, impresoras por TCP/IP
Get-TCPIPPrinter -ComputerName EQUIPO1   # Equipo remoto por nombre
"PC1","PC2" | Get-TCPIPPrinter         # Lista de equipos por pipeline

# Con credenciales y exportando a CSV
$cred = Get-Credential
Get-Content C:\\Equipos.txt | Get-TCPIPPrinter -Credential $cred | Export-Csv C:\\Prn.csv -NoTypeInformation

Cette approche WMI est robuste et très utile pour l'auditIl permet de constituer un inventaire fiable des files d'attente d'écoute IP, d'ajouter des métadonnées opérationnelles (latence ou temps de réponse au ping) et de l'exporter pour analyse. Si vous souhaitez reproduire cette fonctionnalité, le mécanisme clé est l'interrogation… Win32_TCPIPPrinterPort en root/CIMv2, le filtrage par Nom du port en Imprimante Win32 et la gestion des erreurs avec Essayer/attraper lorsque la destination exige ou refuse des informations d'identification.

  Comment ajouter et partager des films personnels sur YouTube

Dans les déploiements Active Directory, il est courant d'associer les imprimantes par service . Grâce à PowerShell, vous pouvez lire l' attribut `department` de l'utilisateur connecté et le comparer à l' attribut `location` des files d'attente d'impression publiées dans Active Directory. Si les deux attributs correspondent, l'imprimante est associée dynamiquement à cet utilisateur. Voici un script récapitulant ce processus :

function Mapear-Impresora($ruta) {
    $net = New-Object -ComObject WScript.Network
    $impresoras = $net.EnumPrinterConnections()
    if ($impresoras -like $ruta) { $net.RemovePrinterConnection($ruta, $true) }
    $net.AddWindowsPrinterConnection($ruta)
}
# Usuario actual
$usuario = $env:USERNAME
$filtro = "(&(objectCategory=User)(samAccountName=$usuario))"
$buscador = New-Object System.DirectoryServices.DirectorySearcher
$buscador.Filter = $filtro
$objUser = $buscador.FindOne().GetDirectoryEntry()
# Todas las colas publicadas
$filtroPrn = "(&(objectCategory=PrintQueue))"
$buscador = New-Object System.DirectoryServices.DirectorySearcher
$buscador.Filter = $filtroPrn
$colas = $buscador.FindAll()
# Mapeo por coincidencia Location vs Department
for ($n=0; $n -lt $colas.Count; $n++) {
    if ($colas.Properties.location -eq $objUser.Properties.department) {
        Mapear-Impresora -ruta $colas.Properties.uncname
    }
}

Cette logique fonctionne parfaitement comme script de démarrage via la stratégie de groupe, car elle garantit que chaque utilisateur reçoive automatiquement les files d'attente de sa zone sans intervention manuelle et avec une cohérence totale sur l'ensemble du domaine. Pour un accès plus facile, vous pouvez créer un raccourci vers « Périphériques et imprimantes » afin d'aider les utilisateurs à localiser leurs files d'attente locales.

Gestion moderne : serveur d’impression avec PowerShell et Universal Print

Serveur d'impression et impression universelle

Si vous gérez un serveur Windows et que vous devez standardiser le service d'impression, PowerShell vous permet de le faire. déployer le rôle, charger conducteurs et les files d'attente de publication à plusieurs reprises. Sous Windows Server 2022 (également valable pour 2016 et 2019), le rôle est installé avec : Install-WindowsFeature -Name Print-ServerAprès cela, il est généralement conseillé redémarrer le serveur sur lequel enregistrer les modifications : Restart-Computer.

L'étape suivante consiste à avoir driver Adapté au système. Idéalement, téléchargez la dernière version auprès du fabricant et testez-la d'abord dans un environnement de test. Pour injecter le fichier INF, utilisez pnputil.exe -i -a "C:\\Ruta\\al\\driver.inf"Vérifiez que les compteurs Total tenté y Nombre importé avec succès Ils correspondent. Une fois le fichier INF chargé, enregistrez le contrôleur dans le spouleur avec Add-PrinterDriver -Name "HP Universal Printing PCL 6"Si vous utilisez des modèles HP, le guide pour Configurer l'imprimante HP sur un réseau sans fil Il peut servir de référence pratique pour valider la connectivité et les pilotes.

Créez maintenant le port TCP/IP standard pour l'adresse IP de l'imprimante : Add-PrinterPort -Name "10.1.1.123" -PrinterHostAddress "10.1.1.123"Enfin, définissez la file d'attente partagée avec son pilote et son port, et publiez-la si vous souhaitez qu'elle apparaisse dans Active Directory : Add-Printer -Name "HP-UP PCL6" -DriverName "HP Universal Printing PCL 6" -Shared -ShareName "HP-UP PCL6" -PortName "10.1.1.123" -PublishedVous pouvez valider le résultat avec Get-Printer et vérifiez que tout est en ordre.

L'impression n'est peut-être pas le service le plus glamour d'un centre de données, mais elle reste essentielle pour les factures et les rapports dans de nombreux environnements. L'automatisation de ces étapes par des scripts permet de gagner un temps précieux et, surtout, d'éliminer les incohérences entre serveurs. De plus, en combinant ces techniques avec les connexions globales de PrintUI ( /ga ), vous garantissez que les postes de travail accèdent toujours aux files d'attente d'impression de l'entreprise dont ils ont besoin, sans intervention manuelle.

Dans les scénarios cloud ou hybrides, Microsoft propose le module PowerShell Gestion universelle des impressions pour gérer Universal Print. Il est installé avec Install-Module UniversalPrintManagementLa première fois que vous utiliserez PSGallery, PowerShell vous avertira qu'il s'agit d'un dépôt non fiableRépondez « Oui » ou « Oui à tous » pour continuer. Pour désinstaller, il vous suffit de… Uninstall-Module -Name UniversalPrintManagement.

Une fois installé, connectez-vous avec Service Connect-UPqui ouvre une boîte de dialogue d'authentification avec votre compte Azure. Les cmdlets suivent la convention VERBE-NOM et utilisez le préfixe UPVous pouvez découvrir commandes avec Get-Command -Verb Get -Module UniversalPrintManagement et consulter une aide détaillée, par exemple avec Get-Help Get-UPPrinter -Detailed.

Gardez à l'esprit une nuance importante : les cmdlets Obtenir-* Le module renvoie des résultats paginés en utilisant jetons de continuationIl est donc recommandé de stocker la réponse dans une variable et d'y accéder ensuite. .Results pour gérer les collections volumineuses ou les nouvelles tentatives. Ce modèle améliore le résilience en cas de panne de réseau ou de dépassement de délai dans les environnements comportant de nombreuses imprimantes.

  Comment envoyer des données PDF avec WhatsApp sur un téléphone Android ?

L'ensemble de commandes couvre plusieurs domaines : pour les imprimantes, vous disposez de Get-UPPrinter et Remove-UPPrinter ; pour les propriétés, de Set-UPPrinterProperty ; pour les ressources partagées, de New-UPPrinterShare , Get-UPPrinterShare , Remove-UPPrinterShare et Set-UPPrinterShare . La gestion des permissions est assurée par Grant-UPAccess , Revoke-UPAccess et Get-UPAllowedMember, permettant de consulter les utilisateurs ayant accès à l'impression.

Les connecteurs (pour l'intégration des imprimantes locales à Universal Print) sont gérés par les commandes Get-UPConnector , Remove-UPConnector et Set-UPConnectorProperty . Pour le suivi opérationnel, vous pouvez consulter les tâches d'impression (Get-UPPrintJob) et générer des rapports d'utilisation ( Get-UPUsageReport) . Cette suite vous permet d'orchestrer la plateforme à partir de scripts et d'automatiser les tâches récurrentes à grande échelle.

Comme vous pouvez le constater, l'écosystème d'impression Windows s'étend des méthodes traditionnelles WMI et COM à la couche cloud Universal Print, incluant le moteur d'installation printui.dll . Grâce à quelques modèles robustes, vous pouvez gérer l'ensemble des aspects, de la configuration des utilisateurs et de l'inventaire des adresses IP au déploiement industriel de files d'impression côté serveur et au contrôle des autorisations dans le cloud.

Enfin, voici une recommandation utile : lorsque la visibilité est primordiale, combinez l’interrogation du Registre pour lister les connexions par périphérique ( /ga ) avec CIM/WMI pour extraire les détails techniques. Si vous utilisez Universal Print, intégrez les résultats paginés dans des variables avant de les traiter. Cette combinaison vous fournira des listes complètes et cohérentes, faciles à utiliser dans les rapports ou les tableaux de bord.

L'objectif de tout ce qui précède est de vous permettre de passer d'un environnement où « chaque PC fait sa propre chose » à un environnement contrôlé : pilotes installés silencieusement pour éviter l'erreur 740, files d'attente déployées à partir de PowerShell avec des ports et des pilotes connus, mappages automatiques par département et, si nécessaire, gestion centralisée dans Universal Print avec des cmdlets qui parlent le langage du travail quotidien d'un administrateur.

La maîtrise de ces composants vous permet de travailler plus sereinement et avec moins d'improvisation : printui.dll pour le déploiement à l'échelle de l'équipe , PowerShell classique pour les tâches locales et distantes, et Universal Print pour la mise à l'échelle et l'audit dans le cloud. Quel que soit votre point de départ, vous disposez de tous les outils nécessaires pour optimiser votre plateforme d'impression, la rendre stable et bien documentée.

Supprimer et ajouter une imprimante dans Windows 11
Article connexe:
Comment partager une imprimante réseau sous Windows 11 étape par étape