Meilleur auteur de réponses
Déploiement en ligne de commandes des imprimantes réseaux

Question
-
Bonjour,
Quelle méthode faut-il employer pour déployer les imprimantes réseaux, au travers de ligne de commande ?
Je précise :
+ Le serveur d'impression (W2K8_R2_64) est opérationnel avec toutes les files d'attentes et les pilotes 32 et 64 bits..
+ L'ancien serveur d'impression (W2K8_32) sera arrêté plus tard.
+ Les utilisateurs se servent de l'ancien serveur d'impression.
Le but est de lister pour chaque PC la ou les files d'attente des imprimantes et de les recréer avec le nouveau chemin et forcement les nouveaux pilotes, en ligne de commande (batch ou PowerShell).
(il me sera très difficile de créer des groupes AD pour chaque imprimante, et d'utiliser le logonscript)
Cdlt,
- Modifié Cerkyr vendredi 29 juin 2018 14:21
vendredi 29 juin 2018 14:19
Réponses
-
' Thierry DEMAN (tdeman@free.fr) Dim CleReg,arrSubkeys,StrComputer Dim imp1(),imp2(),srv1(),srv2(),i,nbi,x dim Queue,Server,file,objfs,WshShell 'Lecture des arguments If WScript.Arguments.named.Count=0 Then MsgBox("Mov printers Tool"+Newline+"Usage: movPrinter.vbs"+Newline+"Necessary Option /P:printerFile") wscript.quit End If If WScript.Arguments.Named.exists("P") Then PrinterFile=WScript.Arguments.Named.Item("P") End If SET objFS=CreateObject ("Scripting.FileSystemObject") Set WshShell = WScript.CreateObject ("WScript.Shell") 'Lecture de clé de registre CleReg="Printers\connections" Const HKEY_CURRENT_USER = &H80000001 strComputer = "." nbi=ChargeImprimantes(PrinterFile) 'wscript.echo nbi Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv") objRegistry.EnumKey HKEY_CURRENT_USER, CleReg, arrSubkeys If IsArray(arrSubkeys) Then For Each strSubkey In arrSubkeys x=instr(3,strSubkey,",")+1 server=mid(strsubkey,3,x-4) queue=mid(strsubkey,x) ' wscript.echo "\\"+server+"\"+queue for i=1 To NBI If Ucase(Server)=Ucase(srv1(i)) AND ucase(Queue)=Ucase(imp1(i)) Then wscript.echo "Replace \\"+srv1(i)+"\"+imp1(i)+" By \\"+srv2(i)+"\"+imp2(i) objRegistry.DeleteKey HKEY_CURRENT_USER, CleReg +"\"+ strSubkey nk=CleReg +"\,,"+srv2(i)+","+imp2(i) objRegistry.CreateKey HKEY_CURRENT_USER, nk objRegistry.SetStringValue HKEY_CURRENT_USER,nk,"Provider","win32spl.dll" objRegistry.SetStringValue HKEY_CURRENT_USER,nk,"Server","\\"+srv2(i) ObjRegistry.getStringValue HKEY_CURRENT_USER,"Software\Microsoft\Windows NT\CurrentVersion\Devices","\\"+srv1(i)+"\"+imp1(i),OldDevice objRegistry.Deletevalue HKEY_CURRENT_USER, "Software\Microsoft\Windows NT\CurrentVersion\Devices","\\"+srv1(i)+"\"+imp1(i) objRegistry.SetStringValue HKEY_CURRENT_USER,"Software\Microsoft\Windows NT\CurrentVersion\Devices","\\"+srv2(i)+"\"+imp2(i),OldDevice DefaultPrinter = WshShell.RegRead("HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device") DefaultPrinter = replace(ucase(DefaultPrinter),Ucase("\\"+srv1(i)+"\"+imp1(i)),"\\"+srv2(i)+"\"+imp2(i)) wshShell.regwrite "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device", DefaultPrinter End If next Next End If Function ChargeImprimantes(sfile) i=0 on error resume next Set File = objFS.OpenTextFile( sFile, 1) if err.number<>0 Then wscript.echo "No replacement printers file" err.clear wscript.quit End If on error goto 0 Do While not File.AtEndOfStream sLigne=trim(File.readLine) IF left(sligne,1)<>";" Then i=i+1 redim Preserve imp1(i),imp2(i),srv1(i),srv2(i) x=instr(sligne,",") srv1(i)=left(sligne,x-1) sligne=mid(sligne,x+1) x=instr(sligne,",") imp1(i)=left(sligne,x-1) sligne=mid(sligne,x+1) x=instr(sligne,",") srv2(i)=left(sligne,x-1) imp2(i)=mid(sligne,x+1) ' wscript.echo srv1(i),imp1(i),srv2(i),imp2(i) End If Loop File.Close If i=0 Then wscript.echo "No replacement programmed" wscript.quit End If ChargeImprimantes=i End Function
Thierry DEMAN. Exchange MVP. MCSE:Messaging 2013,MCSE:Server Infrastructure 2012(83 MCPs). MCSA Office 365 https://mvp.microsoft.com/en-us/mvp/Thierry%20Deman-7660 http://base.faqexchange.info
- Marqué comme réponse Nedeltcho PopovMicrosoft contingent staff jeudi 2 août 2018 11:55
lundi 2 juillet 2018 16:37
Toutes les réponses
-
Bonjour,
soit l'on sait qui utilise quoi, et l'on peut utiliser les stratégies pour "mapper" les imprimantes sur les bons groupes/utilisateurs.
soit on ne sait pas, et là, le script de connexion est la meilleure solution.
En fait plusieurs exemples de script ont été publiés récemment...
Il n'est pas nécessaire de connaître les drivers/pilotes ou autres, du moment que l'on connaît le nom du/des serveurs sources, les noms des partages actuellement utilisés, et la destination.
Le script parcourt les imprimantes connectées de l'utilisateur et met à jour avec la destination.
Le fichier texte de paramètre est sous la forme, Il contient autant de lignes que d'imprimantes à mettre à jour
serveurSource,PARTAGEsource,ServeurDestination,PARTAGEDestination
Seuls les utilisateurs possédant une ou plusieurs imprimantes de la liste sont mis à jour...
Le script est indépendant du système 32 ou 64 bits.
A bientôt,
Thierry DEMAN. Exchange MVP. MCSE:Messaging 2013,MCSE:Server Infrastructure 2012(83 MCPs). MCSA Office 365 https://mvp.microsoft.com/en-us/mvp/Thierry%20Deman-7660 http://base.faqexchange.info
- Proposé comme réponse matteu31400 lundi 2 juillet 2018 06:36
vendredi 29 juin 2018 16:40 -
Malheureusement, l'URL proposée est bloquée par la sécurité informatique de l'entreprise ....lundi 2 juillet 2018 12:48
-
' Thierry DEMAN (tdeman@free.fr) Dim CleReg,arrSubkeys,StrComputer Dim imp1(),imp2(),srv1(),srv2(),i,nbi,x dim Queue,Server,file,objfs,WshShell 'Lecture des arguments If WScript.Arguments.named.Count=0 Then MsgBox("Mov printers Tool"+Newline+"Usage: movPrinter.vbs"+Newline+"Necessary Option /P:printerFile") wscript.quit End If If WScript.Arguments.Named.exists("P") Then PrinterFile=WScript.Arguments.Named.Item("P") End If SET objFS=CreateObject ("Scripting.FileSystemObject") Set WshShell = WScript.CreateObject ("WScript.Shell") 'Lecture de clé de registre CleReg="Printers\connections" Const HKEY_CURRENT_USER = &H80000001 strComputer = "." nbi=ChargeImprimantes(PrinterFile) 'wscript.echo nbi Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv") objRegistry.EnumKey HKEY_CURRENT_USER, CleReg, arrSubkeys If IsArray(arrSubkeys) Then For Each strSubkey In arrSubkeys x=instr(3,strSubkey,",")+1 server=mid(strsubkey,3,x-4) queue=mid(strsubkey,x) ' wscript.echo "\\"+server+"\"+queue for i=1 To NBI If Ucase(Server)=Ucase(srv1(i)) AND ucase(Queue)=Ucase(imp1(i)) Then wscript.echo "Replace \\"+srv1(i)+"\"+imp1(i)+" By \\"+srv2(i)+"\"+imp2(i) objRegistry.DeleteKey HKEY_CURRENT_USER, CleReg +"\"+ strSubkey nk=CleReg +"\,,"+srv2(i)+","+imp2(i) objRegistry.CreateKey HKEY_CURRENT_USER, nk objRegistry.SetStringValue HKEY_CURRENT_USER,nk,"Provider","win32spl.dll" objRegistry.SetStringValue HKEY_CURRENT_USER,nk,"Server","\\"+srv2(i) ObjRegistry.getStringValue HKEY_CURRENT_USER,"Software\Microsoft\Windows NT\CurrentVersion\Devices","\\"+srv1(i)+"\"+imp1(i),OldDevice objRegistry.Deletevalue HKEY_CURRENT_USER, "Software\Microsoft\Windows NT\CurrentVersion\Devices","\\"+srv1(i)+"\"+imp1(i) objRegistry.SetStringValue HKEY_CURRENT_USER,"Software\Microsoft\Windows NT\CurrentVersion\Devices","\\"+srv2(i)+"\"+imp2(i),OldDevice DefaultPrinter = WshShell.RegRead("HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device") DefaultPrinter = replace(ucase(DefaultPrinter),Ucase("\\"+srv1(i)+"\"+imp1(i)),"\\"+srv2(i)+"\"+imp2(i)) wshShell.regwrite "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device", DefaultPrinter End If next Next End If Function ChargeImprimantes(sfile) i=0 on error resume next Set File = objFS.OpenTextFile( sFile, 1) if err.number<>0 Then wscript.echo "No replacement printers file" err.clear wscript.quit End If on error goto 0 Do While not File.AtEndOfStream sLigne=trim(File.readLine) IF left(sligne,1)<>";" Then i=i+1 redim Preserve imp1(i),imp2(i),srv1(i),srv2(i) x=instr(sligne,",") srv1(i)=left(sligne,x-1) sligne=mid(sligne,x+1) x=instr(sligne,",") imp1(i)=left(sligne,x-1) sligne=mid(sligne,x+1) x=instr(sligne,",") srv2(i)=left(sligne,x-1) imp2(i)=mid(sligne,x+1) ' wscript.echo srv1(i),imp1(i),srv2(i),imp2(i) End If Loop File.Close If i=0 Then wscript.echo "No replacement programmed" wscript.quit End If ChargeImprimantes=i End Function
Thierry DEMAN. Exchange MVP. MCSE:Messaging 2013,MCSE:Server Infrastructure 2012(83 MCPs). MCSA Office 365 https://mvp.microsoft.com/en-us/mvp/Thierry%20Deman-7660 http://base.faqexchange.info
- Marqué comme réponse Nedeltcho PopovMicrosoft contingent staff jeudi 2 août 2018 11:55
lundi 2 juillet 2018 16:37