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 néanmoins 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.
Le principe de mise en place est le suivant:
On ajoute les drivers dans un dossier accéssible (comme L:\Progs\ro\drivers_imprimantes)
On place un dossier imprimantes dans /etc/sambaedu/applications/
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).
On ajoute un fichier scripts.json qui indiquera quels scripts powershell sont à lancer, ainsi que les machines/parcs concernés.
Le script est lancé à chaque démarrage, installe l'imprimante si elle ne l'est pas, met en place les réglages.
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).

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.
plus d'informations à propos du script en fin de page.
nano /etc/sambaedu/applications/imprimantes/nom_du_copieur.ps1
On édite les variables du début.
$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.

ATTENTION: Si vous avez déjà des imprimantes déployées par WPKG, vous devez impérativement mettre le même nom d'imprimante, et le même nom de port que celui utilisé par wpkg.
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.
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
On se connecte en admin sur un poste windows du parc attribué à un copieur. On fait tous les réglages souhaités

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é.

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.
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
Si vous aviez déjà déployé vos imprimantes par wpkg, alors vous pouvez faire cohabiter les deux méthodes le temps de la transition.
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'install de l'imprimante va se faire de multiples fois, créant des soucis d'impression.
Si vous décochez l'install par WPKG, vous pouvez effacer le fichier c:\nom_imprimante.txt, WPKG considerera que l'imprimante n'y est plus.
function install_printer {
#Installer les pilotes d'imprimante
pnputil.exe /a $chemin_driver
#Ajouter les pilotes
Add-PrinterDriver -Name $nom_driver
#Créer les ports IP
$checkPortExists = Get-Printerport -Name $nom_port -ErrorAction SilentlyContinue
if (-not $checkPortExists) {
Add-PrinterPort -Name $nom_port -PrinterHostAddress $ip_imprimante
}
#Installer les imprimantes
Add-Printer -Name "$nom_imprimante" -DriverName "$nom_driver" -PortName $nom_port
}
La fonction install_printer (appelée si l'imprimante n'est pas installée) met en place les drivers, crée le port TCP_IP et installe l'imprimante.
function install_reglages {
If(Test-Path -Path $export_reglages)
{
rundll32 printui.dll PrintUIEntry /Sr /n "$nom_imprimante" /a $export_reglages
}
}
La fonction install_reglages est appelée à chaque lancement du script. Ici, on teste la présence d'un fichier de réglages. S'il est prsésent, on écrase la conf du poste par celle du fichier.
La fin du script indique comment l'ensemble procède: L'install d'imprimante ne se fait que si l'imprimante n'est pas présente. Cette installation est suivie de l'import des réglages.
Aux boots suivants, seul l'import des réglages est fait. Cette opération ne ralentit pas la durée d'allumage des postes.
#On récupère la liste des imprimantes déjà installées en local
$localPrinters = Get-Printer | Select-Object -ExpandProperty Name
#On regarde si l'imprimante est déjà présente
if ($localPrinters -contains "$nom_imprimante") {
install_reglages
}
else {
install_printer
Start-Sleep -Seconds 3
install_reglages
}