PowerShell - Un portail d'installation d'imprimantes pour vos utilisateurs

Illustration en coup de crayon d'un bureau avec imprimante et portail d'aide

📌 Introduction

Dans beaucoup d'entreprises, la même question revient chaque semaine : « Comment j'installe l'imprimante du 3ème étage ? » Les réponses sont dispersées dans des mails, des captures d'écran périmées, ou la mémoire d'un technicien. J'ai voulu régler ce problème avec un outil simple : PrinterTutorialGenerator.

Le principe tient en trois idées : un script PowerShell lit les imprimantes partagées d'un serveur d'impression Windows, une page web les présente aux utilisateurs, et chaque imprimante dispose d'un tutoriel prêt à suivre pour Windows, macOS ou Linux, avec le chemin ou la commande déjà renseignés.


🧩 Partie 1 — Les trois composants

Le projet ne contient aucune dépendance externe : trois fichiers suffisent, posés dans un dossier IIS interne.

Composant Rôle
Export-PrinterList.ps1 Interroge le serveur d'impression et génère printers.json. Lecture seule : il ne modifie jamais le serveur.
editeur-imprimantes.html Éditeur pour le technicien : ajouter une imprimante, corriger un emplacement, personnaliser l'en-tête et le pied de page. Disponible en français et en anglais.
index.html La page vue par les utilisateurs : recherche par nom, emplacement ou file d'impression, puis tutoriel adapté au système.

📄 Partie 2 — L'export automatique : Export-PrinterList.ps1

Le cœur du script tient en quelques lignes : on récupère les files partagées, on construit un objet par file, puis on écrit le JSON en UTF-8 sans BOM, pour que le navigateur affiche correctement les accents.

🔧 Extrait

# Récupère uniquement les files partagées du serveur d'impression
$printers = Get-Printer -ComputerName $Server |
    Where-Object { $_.Shared -eq $true } |
    Sort-Object ShareName

# UTF-8 sans BOM : évite les accents cassés dans le navigateur
[System.IO.File]::WriteAllText($OutPath, $json, (New-Object System.Text.UTF8Encoding($false)))

🎛️ L'emplacement lisible : mapping.csv

Quand le champ Location de Windows est vide ou peu parlant, un fichier optionnel mapping.csv (séparateur ;) donne un emplacement lisible à chaque file :

queue;location
IMP-1R-01;1er étage - Entrée principale
IMP-3C-01;3ème étage - Couloir C01

💡 Partie 3 — Publication sur IIS

La publication est volontairement simple : index.html et printers.json sont posés côte à côte dans un dossier IIS interne. L'adresse communiquée aux utilisateurs est http://<serveur>/printers/. Il n'y a ni base de données, ni service à installer.


🔐 Partie 4 — Le point sécurité : PrintNightmare

Le plus gros piège du projet n'est pas technique, il est de sécurité. Pour que les utilisateurs standard installent des pilotes sans élévation, on est tenté de désactiver la restriction administrateur et de supprimer les invites. C'est exactement ce qu'il faut éviter après CVE-2021-34527.

⚠️ Règle du projet : RestrictDriverInstallationToAdministrators reste à 1, les serveurs autorisés sont une liste blanche de FQDN, et les invites d'élévation sont conservées. Une exception n'est accordée qu'à un groupe dédié, avec une acceptation écrite du risque.

Le dépôt contient les tutoriels pour une GPO on-premises, Microsoft Intune et VMware Workspace ONE UEM, ainsi qu'une commande de contrôle de l'état effectif sur chaque poste.


🐧 Partie 5 — Clients macOS et Linux

La méthode recommandée passe par le service de rôle Impression Internet de Windows Server, qui expose la file en IPP via IIS. Les commandes sont documentées pour macOS (Réglages Système) et Linux (CUPS).

# Linux (CUPS) : test sans pilote, à valider sur votre file
sudo lpadmin -p IMP-1R-01 -E \
  -v "ipp://PRTSRV01.exemple.local/printers/IMP-1R-01" \
  -m everywhere

⚠️ Points d'attention

  • Tester avant de déployer : la prise en charge d'IPP Everywhere dépend de la file et de son pilote.
  • Utiliser des FQDN dans la liste des serveurs autorisés, jamais des noms courts.
  • Ne jamais publier de données réelles : printers.json et mapping.csv doivent rester hors du dépôt.

✅ Conclusion

Quelques fichiers, aucune dépendance, et des utilisateurs qui retrouvent leur imprimante sans attendre le support. Le projet est publié sur GitHub sous licence MIT : github.com/Poste2Travail/PrinterTutorialGenerator.


💬 Vous testez l'outil dans votre environnement ? Partagez vos retours en commentaires, en particulier sur les pilotes qui résistent à l'installation sans élévation !

Commentaires

Posts les plus consultés de ce blog

MDT - Guide de résolution des problèmes courants de configuration lors du déploiement d'un système d'exploitation Microsoft

Workspace One - Utilisation de réseaux Wi-Fi WPA3 avec Workspace ONE UEM

Powershell - Comment tester les ports TCP ?