Installation d’imprimante par script AutoIt
Thursday, 13. March 2008, 15:29:32
Il suffit alors de composer un petit script dans le style :
REM DEFINITION DES VARIABLES SET PRTSRV=NOMSERVERIMPRESSION SET PRTSRVBCK=NOMSERVERIMPRESSIONBACKUP CHANGE CLIENT /DEFAULT_PRINTERS REM SUPPRESSION IMPRIMANTE %LOGONSERVER%\NETLOGON\CON2PRT.EXE /F IF %CLIENTNAME%==NOMDELASTATION Goto NOMSIGNET :AUTRES %LOGONSERVER%\NETLOGON\CON2PRT.EXE /CD \\%PRTSRV%\NOMDEPARTAGE GOTO END :NOMSIGNET %LOGONSERVER%\NETLOGON\CON2PRT.EXE /CD \\%PRTSRV%\NOMDEPARTAGE GOTO END :END EXIT
Toutefois il y a moyen de faire cela plus sympathiquement : j’entend en AutoIt…
Passons en revue deux manières simples.
La première est d’utiliser similairement l’application CON2PRT.EXE de Microsoft, la seconde la DLL permettant l’installation d’une imprimante réseau : PRINTUI.DLL.
Vu que nous pouvons tout aussi bien utiliser le nom de la machine ou le nom d’utilisateur, et vu que j’ai déjà présenté dans le script MS-DOS que c’était le nom de la machine, changeons cela avec le nom d’utilisateur.
Décentralisons nos informations dans un fichier INI tel :
[SERVERS] PRINTSERVER=NomDuServerImpression LOGONSERVER=LogonServer [USERNAME] GROUMPHY=Imprimante1|Imprimante2 GROUMPHY2=0
Groumphy et Groumphy2 sont les noms d’utilisateurs standards…
Enregistrons ce fichier.
Commençons par définir ce fichier en variable.
Global Const $s_INI = "InstImpNetLogon.ini"
Si nous utilisons CON2PRT.EXE rajoutons pourquoi pas :
Global Const $s_C2P = "con2prt.exe"
Rajoutons une structure pour pouvoir vérifier la présence de nos fichiers nécessaire :
Func _test()
If NOT FileExists(@ScriptDir & "\" & $s_INI) Then _error($s_INI)
If NOT FileExists(@ScriptDir & "\" & $s_C2P) Then _error($s_C2P)
EndFunc
Func _error($param1)
MsgBox(0 + 16, "Error", "Fatal Error. Application 'Core' File Not Found." & @CR & _
"Error Code : " & @ScriptLineNumber & @CR & _
"File Code : " & $param1 & " not found." & @CR & @CR & _
"Please contact your System Administrator",10)
Exit
EndFunc
Avant de commencer il est bon de supprimer toutes les imprimantes (identiquement à notre script MS-DOS).
Func _deletePrt()
RunWait(@ScriptDir & "\" & $s_C2P & " /f")
EndFunc
Et de poser les variables :
Global Const $s_PrtServer = IniRead($s_INI, "SERVERS", "PRINTSERVER", "")
Global Const $s_LogonServer = IniRead($s_INI, "SERVERS", "LOGONSERVER", "")
Dim $s_UserName, $s_iniRead, $s_Compteur
$s_UserName = @UserName
$s_iniRead = IniRead($s_INI, "USERNAME", $s_UserName, "")
$s_iniRead = StringSplit($s_iniRead, "|")
Parfais. La structure de base est en place.
Comme vous pouvez le constater dans le fichier INI j’ai mis « 0 » pour l’utilisateur Groumphy2. « 0 » m’indique que je ne dois pas installer d’imprimante.
Faisons une petite structure conditionnelle de ce type alors :
If $s_iniRead[1] = 0 Then
MsgBox(0 + 64, "Information", "No printers to install... Exit of script.", 10)
Exit
EndIf
Mais si nous devons installer des imprimantes, il nous faut une boucle permettant de faire cela :
$s_Compteur = 0
Do
$s_Compteur = $s_Compteur + 1
_installPrt($s_iniRead[$s_Compteur])
Until $s_Compteur = $s_iniRead[0]
Dans cette boucle, j’appele la function _installPrt que voiçi :
Func _installPrt($param2)
RunWait("\\" & $s_LogonServer & "\" & $s_C2P & " /c " & "\\" & $s_PrtServer & "\" & $param2)
EndFunc
Et il ne faut rien de plus.
Pour maintenant rajouter un nouvel utilisateur nous n’aurons plus qu’à changer le fichier INI.
Nous avons aussi la possibilité de définir l’imprimante par défaut. Pour ce faire il suffit de rajouter une structure conditionnelle dans la fonction _installPrt pour que la première imprimante prise dans la zone de mémoire soit celle par défaut (installable avec /CD en place de /C).
Pour installer l’imprimante avec PRINTUI.DLL nous ferons exactement de même… Sauf que nous aurons la commande suivante :
$comm = RunWait("rundll32 printui.dll,PrintUIEntry /in /q /n\\" & $s_PrtServer & "\" & $param2, "", @SW_HIDE)
Plus simple, nous ne pouvons le faire. Cela fonctionne correctement en pratique…