Installer/configurer une imprimante locale avec un script Powershell

ATTENTION: la méthode décrite ici est encore expérimentale et n'a été testée que par un petit nombre de personnes.

Depuis la version 24H2 de Windows 11, l'outils WMIC n'est plus fourni dans windows, il n'est donc plus possible d'utiliser la méthode d'installation locale des imprimantes par WPKG.

Il est possible d'installer les imprimantes avec des scripts Powershell.

Il est aussi possible, une fois une imprimante installée et configurée manuellement (choix couleur, format, code d'authentification à entrer,...), d'exporter les réglages sous forme d'un fichier. Le script powershell proposé plus bas permet d'importer ces réglages à chaque démarrage. La gestion des imprimantes est donc aussi pratique en locale qu'en mode serveur d'impression.

Principe de fonctionnement

I Le principe de mise en place est le suivant:

  1. On ajoute les drivers dans un dossier accéssible (comme L:\Progs\ro\drivers_imprimantes)

  2. On place un dossier imprimantes dans /etc/sambaedu/applications/

  3. On ajoute dans ce dossier un script Powershell par imprimante, après avoir indiqué les bonnes valeurs des variables (ip,nom de l'imprimante,etc).

  4. On ajoute un fichier scripts.json qui indiquera quels scripts powershell sont à lancer, ainsi que les machines/parcs concernés.

  5. Le script est lancé à chaque démarrage, installe l'imprimante si elle ne l'est pas, met en place les réglages.

Ajout des drivers

On télécharge les drivers sur le site du fabriquant, et on les place sur un dossier réseau (ici c'est dans Progs\ro\drivers mais l'emplacement est provisoire).

emplacement_drivers.png

Mise en place du script Powershell

Il faut faire un script powershell pour chaque copieur/imprimante.

A faire sur le se4fs, en root.

cd /etc/sambaedu/applications/
mkdir imprimantes
cd imprimantes
wget https://gitlab.sambaedu.org/sambaedu/sambaedu-doc/-/raw/main/pages/03.utiliser-se4/01.guide-administration/05.imprimantes/07.imprimantes_powershell/modele_printer.ps1
mv modele_printer.ps1 nom_du_copieur.ps1
chown -R www-admin:root /etc/sambaedu/applications/imprimantes

Il faut ensuite adapter toutes les variables en début de script. Ne rien modifier d'autre.

$nom_imprimante="Copieur 1 sdp1"
$nom_driver="Kyocera TASKalfa 5053ci KX"
#ATTENTION le nom du driver doit etre EXACTEMENT le meme que celui dans le fichier.inf
$chemin_driver="\\se4fs\progs\ro\drivers\printing\kyocera\Universal\64bit\OEMSETUP.INF"
$nom_port="172.20.150.71"
$ip_imprimante="172.20.150.71"
$export_reglages="\\se4fs\progs\ro\drivers\printing\kyocera\export_copieur1.dat"

ATTENTION: le nom du driver doit être EXACTEMENT le même que celui du fichier.inf du driver. Pour cela, l'ouvrir avec un éditeur de texte comme notepad++ et regarder la syntaxe du modèle.

contenu_inf

Remarque: l'utilisation d'un fichier de réglage n'est absolument pas nécessaire, le script teste la présence de fichier et passe l'étape de réglage s'il n'y est pas.

Affectation des copieurs/imprimantes à des machines/parc de machine

Sur le se4fs en root.

cd /etc/sambaedu/applications/imprimantes/
wget https://gitlab.sambaedu.org/sambaedu/sambaedu-doc/-/raw/main/pages/03.utiliser-se4/01.guide-administration/05.imprimantes/07.imprimantes_powershell/scripts.json
chown -R www-admin:root /etc/sambaedu/applications/imprimantes

Il faut faire très attention à la syntaxe du fichier.

Quelques explications à propos du fichier scripts.json

[
    {
            "os": "windows",
            "action": "startup",
            "includes": [
                    "sdp1",
                    "p202-m75q-prof"
                            ],
            "excludes": [],
            "file": "Copieur_1_sdp1.ps1",
            "interpreter": "powershell"
    },

{
            "os": "windows",
            "action": "startup",
            "includes": [
                    "sdp2",
                    "p202-m75q-prof"
                            ],
            "excludes": [],
            "file": "Copieur_2_sdp1.ps1",
            "interpreter": "powershell"
    },

{
            "os": "windows",
            "action": "startup",
            "includes": [
                    "postes_profs",
                    "p202-m75q-prof"
                            ],
            "excludes": [],
            "file": "Copieur_3_sdp1.ps1",
            "interpreter": "powershell"
    }

]

Il y a ici 3 copieurs (donc 3 blocs { }). Chacun est ici appliqué à un parc et à un poste spécifique pour l'exemple. On peut évidemment ajouter d'autres parcs et machines pour ce copieur, tout comme on peut ajouter d'autres scripts Powershell dans des blocs.

J'attire votre attention sur la présence de virgule à la fin des parc dans la rubrique includes, sauf sur la dernière. De même, pas de virgule à la fin du dernier bloc après le } . La syntaxe globale est [{bloc1},{bloc2},{bloc3},....,{blocx} ]

ATTENTION: Il faut impérativement redémarrer le service php8.2-fpm lorsqu'on modifie un script Powershell, ou le fichier scripts.json

sur le se4fs en root, taper:

service php8.2-fpm restart

Personnalisation des réglages d'un copieur.(optionnel)

On se connecte en admin sur un poste windows du parc attribué à un copieur. On fait tous les réglages souhaités

reglage_copieur

On lance dans l'invite de commande (en administrateur.)

rundll32 printui.dll PrintUIEntry /Ss /n "Copieur 1 sdp1" /a "\\se4fs\progs\ro\drivers\printing\kyocera\export_copieur1.dat"

Un fichier.dat est placé dans le dossier indiqué.

liste_fichiers_reglage

Il suffit de redémarrer le poste pour que les réglages s'appliquent. Il faut parfois un reboot supplémentaire

Le fichier de réglages n'est pas éditable, on doit donc recréer le fichier après chaque modification voulue sur l'imprimante.

L'import des réglages est fait à chaque démarrage.

Suppression d'un copieur (non testé)

La suppression des copieurs n'est pas encore géré de façon automatique, mais il suffit de supprimer le parc dans le scripts.json, puis de créer un fichier /etc/sambaedu/applications/imprimantes un fichier delete_nom_imprimante.ps1 contenant:

#On regarde si l'imprimante est présente
if ($localPrinters -contains "nom_imprimante") {
Remove-Printer -Name "Nom_imprimante" }

on éditera aussi scripts.json pour ajouter


{
            "os": "windows",
            "action": "startup",
            "includes": [
                    "sdp1",
                    "p202-m75q-prof"
                            ],
            "excludes": [],
            "file": "delete_nom_imprimante.ps1",
            "interpreter": "powershell"
    },

Il faut évidemment relancer le service php8.2-fpm

Cohabitation mécanisme WPKG/PowerShell

Si vous aviez déçjà déployé vos imprimantes par wpkg, alors vous pouvez faire cohabiter les deux méthodes.

Si vous installez une machine en W11 24H2, alors il faut décocher l'install wpkg sur le parc. WMIC n'étant pas en place. Le fichier temoin d'install c:\imprimante.txt ne sera pas créé, et l'installd e l'imprimante va se faire de multiples fois, créant des soucis d'impression.