Vous trouverez ci-dessous un script permettant de changer les ports TCP/IP sur lesquels sont connectées les imprimantes. Il est très largement inspiré de celui proposé par lumo.fr.
Comment le mettre en oeuvre ?
- changer les adresses IP des imprimantes sur leur interface web ou sur leur écran de contrôle ;
- télécharger, décompresser le fichier ci-dessus ;
- éditer le fichier avec un éditeur de texte :
- modifier les adresses IP des imprimantes avec les vôtres (première ligne = ancienne adresse IP) ;
- Attention, si vous supprimez une imprimante de la liste, il faut modifier la ligne
« Dim myPrinters(xx,1) » en remplaçant le « xx » par le nombre d’imprimantes restantes
- Par défaut, le script affiche un message à chaque étape. Pour un fonctionnement silencieux, vous devez commenter toutes les lignes débutant par « WScript.Echo », sinon le script attendra une validation de l’utilisateur pour exécuter les actions.
- exécuter ce fichier avec un compte administrateur :
- soit en le plaçant tout simplement sur le bureau du compte administrateur et en cliquant dessus ;
- soit en le plaçant dans le dossier « Démarrage » du menu Démarrer de l’administrateur pour automatiser son lancement lors de la connexion du compte administrateur ;
- soit en utilisant un script pour automatiser son lancement. Dans ce cas, vous devez commenter toutes les lignes débutant par « WScript.Echo », sinon le script attendra de l’utilisateur un clic pour fermer la fenêtre de notification.
Le script
' Script VBS permettant la reconnexion des imprimantes réseaux
' d'un ordinateur suite à un changement du plan d'adressage.
' Il faudra exécuter ce script avec une élévation de privilèges
' sous peine de se voir refuser l'accès.
'
' https://blog.lumo.fr/migrer-des-imprimantes-reseau-a-laide-dun-script-vbs.html
'
' Constants
strComputer="."
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
' Variants
Dim myPrinters(15,1)
' Compléter la liste des imprimantes ci-dessous
' Sur la première ligne, indiquer l adresse IP ACTUELLE
' Sur la deuxième ligne, indiquer la NOUVELLE adresse IP
' Si vous modifiez le nombre d imprimantes ci-dessous,
' pensez à modifier ci-dessus la ligne Dim myPrinters(xx,1)
' en remplaçant xx par le nombre d'imprimantes
'##########################################
' Salle 006 - USB
myPrinters(0,0) = "172.20.6.201"
myPrinters(0,1) = "172.20.150.6"
' Salle 006 bis
myPrinters(1,0) = "172.20.6.202"
myPrinters(1,1) = "172.20.150.56"
' Salle 007
myPrinters(2,0) = "172.20.0.0"
myPrinters(2,1) = "172.20.0.0"
' Salle 008
myPrinters(3,0) = "172.20.0.0"
myPrinters(3,1) = "172.20.0.0"
' Salle 102
myPrinters(4,0) = "172.20.0.0"
myPrinters(4,1) = "172.20.0.0"
' Salle 104
myPrinters(5,0) = "172.20.0.0"
myPrinters(5,1) = "172.20.0.0"
' Salle 106
myPrinters(6,0) = "172.20.0.0"
myPrinters(6,1) = "172.20.0.0"
' Salle 106bis
myPrinters(7,0) = "172.20.0.0"
myPrinters(7,1) = "172.20.0.0"
' Salle 107
myPrinters(8,0) = "172.20.0.0"
myPrinters(8,1) = "172.20.0.0"
' Salle 201
myPrinters(9,0) = "172.20.0.0"
myPrinters(9,1) = "172.20.0.0"
' Salle 204bis
myPrinters(10,0) = "172.20.0.0"
myPrinters(10,1) = "172.20.0.0"
' Salle 205
myPrinters(11,0) = "172.20.0.0"
myPrinters(11,1) = "172.20.0.0"
' Salle 206 - Pas d'imprimante
myPrinters(12,0) = "172.20.0.0"
myPrinters(12,1) = "172.20.0.0"
' Salle 207
myPrinters(13,0) = "172.20.0.0"
myPrinters(13,1) = "172.20.0.0"
' Salle XXX
myPrinters(14,0) = "172.20.0.0"
myPrinters(14,1) = "172.20.0.0"
'##########################################
' Initiate WMI
Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\CIMV2")
' Get collection of local printers with an IP address in the current range
' PortName can contain the string "IP_" or not
Set getPrinters = objWMI.ExecQuery("SELECT * FROM Win32_Printer WHERE Local=True AND (PortName LIKE 'IP_172.20.%' OR PortName LIKE '172.20.%')", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)
' Iterate through that collection
For Each objPrinter In getPrinters
' Display the details for each printer
WScript.Echo "A l'adresse " & objPrinter.PortName & ", je trouve l'imprimante : " & objPrinter.Name
' Replace the current port name after a search into the collection myPrinters
For aPrinter = 0 To 5
' Deleting the string "IP_" if exists
tempPortName = Replace(objPrinter.PortName, "IP_", "")
' Comparaison
If (StrComp(tempPortName, myPrinters(aPrinter,0))) = 0 Then
Set getPorts = objWMI.ExecQuery("SELECT * FROM Win32_TCPIPPrinterPort WHERE HostAddress='" & myPrinters(aPrinter,1) & "'")
If getPorts.Count = 1 Then
WScript.Echo "Le nouveau port existe deja"
Else
' Creating new port
WScript.Echo "Je cree le nouveau port : " & myPrinters(aPrinter,1)
Set objNewPort = objWMI.Get("Win32_TCPIPPrinterPort").SpawnInstance_
objNewPort.Name = "IP_" & myPrinters(aPrinter,1)
objNewPort.Protocol = 1
objNewPort.HostAddress = myPrinters(aPrinter,1)
objNewPort.Put_
End If
' Now map the printer to the new port
WScript.Echo "Je connecte l'imprimante au nouveau port : " & myPrinters(aPrinter,1)
objPrinter.PortName = "IP_" & myPrinters(aPrinter,1)
objPrinter.Put_
' Now, the old port is not in use, we can delete it
WScript.Echo "Je supprime l'ancien port : " & myPrinters(aPrinter,0)
Set getPortsToDelete = objWMI.ExecQuery("SELECT * FROM Win32_TCPIPPrinterPort WHERE HostAddress='" & myPrinters(aPrinter,0) & "'")
For Each portToDelete In getPortsToDelete
portToDelete.Delete_
Next
End If
Next
Next