jackinow Posté(e) le 11 juin 2008 Partager Posté(e) le 11 juin 2008 Bonjour, J'ai pour mission de migrer un serveur, qui fait également serveur d'impression. Et au lieu de me déplacer sur chaque ordinateur pour changer les imprimantes des utilisateurs, j'ai besoins d'un script en vbs qui me permet de les changer automatiquement. Pour cela j'en est trouvé un sur HFR qui est quasi fonctionnel (merci au concepteur) : ' Script de connection des imprimantes réseau pour la migration du Print Server' 25.10.2007, v1.3 Dim WshNetwork dim pDefault strComputer = "." cpt = 0 Const newServer="\\serv-1\" Const oldServer="\\serv-2\" Set WshNetwork = WScript.CreateObject("WScript.Network" ) Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2" ) Set colInstalledPrinters = objWMIService.ExecQuery ("Select * from Win32_Printer" ) 'Quel est la default printer pDefault = GetDefaultPrinter For Each objPrinter in colInstalledPrinters Name = LCase(objPrinter.Name) 'Ne modifie que les imprimantes réseau sur l'ancien serveur et non les autres If inStr(Name, oldServer) Then cpt = ctp + 1 'Remplace le nom de l'ancien serveur par le nouveau NewName = Replace(Name, oldServer, newServer) 'Remove de l'ancien mappage WshNetwork.RemovePrinterConnection Name 'Mappage sur le nouveau print server WshNetwork.AddWindowsPrinterConnection NewName End If Next 'Si il n'y a pas d'imprimante réseau, l'imprimante par défaut reste la même If (cpt > 0) then 'Nouveau default printer pDefault = Replace(pDefault, oldServer, newServer) WshNetwork.SetDefaultPrinter pDefault End If 'Fin du script Wscript.quit() 'Trouve l'imprimante définie par défaut Function GetDefaultPrinter() Set oShell = CreateObject("WScript.Shell" ) sRegVal = "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device" sDefault = "" On Error Resume Next sDefault = oShell.RegRead(sRegVal) sDefault = Left(sDefault ,InStr(sDefault, "," ) - 1) On Error Goto 0 GetDefaultPrinter = sDefault End Function Ca fonctionne très bien pour Win XP et Win Server 2003. Mais ça plante sous 2000. Ne m'y connaissant pas du tout je me demande si vous pouvez m'aider Merci d'avance =) ps: il n'aime pas à partir de la ligne en gras Lien vers le commentaire Partager sur d’autres sites More sharing options...
Spaz001 Posté(e) le 17 juin 2008 Partager Posté(e) le 17 juin 2008 De ce que je sais, il faut passer par une commande shell, les wmi sur 2000, y a quasi rien. Set WshShell = CreateObject("Wscript.Shell")WshShell.Run "rundll32 printui.dll,PrintUIEntry /dn /q /n " & Name De la même facon, AddPrinter devrait ne pas fonctionner, donc pareil, en shell WshShell.Run "rundll32 printui.dll,PrintUIEntry /in /q /n " & NewName Et encore une fois, le SetDefaultPrinter devrait ne pas fonctionner sous 2000. Là encore, en shell WshShell.Run "rundll32 printui.dll,PrintUIEntry /y /q /n " & pDefault Ces commandes shell marchent aussi sous XP (et sans doute 2003) donc tu devrais pas avoir besoin de faire un script par OS. Lien vers le commentaire Partager sur d’autres sites More sharing options...
jackinow Posté(e) le 8 juin 2009 Auteur Partager Posté(e) le 8 juin 2009 N'étant pas un pro du script, tu le reformerais comment donc? Ouais dsl, je sais, c'est un peu vieux Lien vers le commentaire Partager sur d’autres sites More sharing options...
Spaz001 Posté(e) le 8 juin 2009 Partager Posté(e) le 8 juin 2009 J'ai commenté les vieilles lignes avec un ''', et mis un '* *' sur les nouvelles ' Script de connection des imprimantes réseau pour la migration du Print Server ' 25.10.2007, v1.3 Dim WshNetwork dim pDefault strComputer = "." cpt = 0 Const newServer="\\serv-1\" Const oldServer="\\serv-2\" Set Shell = CreateObject("Wscript.Shell") '* *' Set WshNetwork = WScript.CreateObject("WScript.Network" ) Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2" ) Set colInstalledPrinters = objWMIService.ExecQuery ("Select * from Win32_Printer" ) 'Quel est la default printer pDefault = GetDefaultPrinter For Each objPrinter in colInstalledPrinters Name = LCase(objPrinter.Name) 'Ne modifie que les imprimantes réseau sur l'ancien serveur et non les autres If inStr(Name, oldServer) Then cpt = ctp + 1 'Remplace le nom de l'ancien serveur par le nouveau NewName = Replace(Name, oldServer, newServer) 'Remove de l'ancien mappage '''WshNetwork.RemovePrinterConnection Name Shell.Run "rundll32 printui.dll,PrintUIEntry /dn /q /n" & Name '* *' 'Mappage sur le nouveau print server '''WshNetwork.AddWindowsPrinterConnection NewName Shell.Run "rundll32 printui.dll,PrintUIEntry /in /q /n" & NewName '* *' End If Next 'Si il n'y a pas d'imprimante réseau, l'imprimante par défaut reste la même If (cpt > 0) then 'Nouveau default printer pDefault = Replace(pDefault, oldServer, newServer) '''WshNetwork.SetDefaultPrinter pDefault Run "rundll32 printui.dll,PrintUIEntry /y /q /n" & pDefault '* *' End If 'Fin du script Wscript.quit() 'Trouve l'imprimante définie par défaut Function GetDefaultPrinter() Set oShell = CreateObject("WScript.Shell" ) sRegVal = "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device" sDefault = "" On Error Resume Next sDefault = oShell.RegRead(sRegVal) sDefault = Left(sDefault ,InStr(sDefault, "," ) - 1) On Error Goto 0 GetDefaultPrinter = sDefault End Function Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tripspirit Posté(e) le 3 mars 2010 Partager Posté(e) le 3 mars 2010 Bonsoir Messieurs, Ce post est vieux et pourtant il m'est bien utile. Ce script VBS marche très bien à l'exception de la partie qui permet de récupérer l'imprimante par défaut. La file d'imprimante par défaut après exécution du script n'est pas celle qu'il y avait à l'initial (avant exécution) mais la première qui s'installe.. J'essaye dans de comprendre le script.. de le modifier (une demi journée dessus là ... oui :( ), mais je n'y connais rien en vb ... Votre aide me serait d'une grande utilité ! Merci bcp par avance Trip Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tripspirit Posté(e) le 4 mars 2010 Partager Posté(e) le 4 mars 2010 Hello Bon après avoir tergiverser dans tous les sens et essayer de modifier le script..j'ai enfin trouver une soluce ... En fait, le script est tout simplement parfait ... la seule chose que j'ai ajouté est un "Wscript.sleep 3000" afin de temporiser un peu pour laisser le mapper des nouvelles files d'impressions.. autrement il ne trouve pas l'imprimante à mettre par défaut... 'Mappage sur le nouveau print server '''WshNetwork.AddWindowsPrinterConnection NewName Shell.Run "rundll32 printui.dll,PrintUIEntry /in /q /n" & NewName '* *' End If Next [b][size=4]Wscript.sleep 3000[/size][/b] 'S'il n'y a pas d'imprimante réseau, l'imprimante par défaut reste la même If (cpt > 0) then 'Nouveau default printer pDefault = Replace(pDefault, oldServer, newServer) '''WshNetwork.SetDefaultPrinter pDefault Run "rundll32 printui.dll,PrintUIEntry /y /q /n" & pDefault '* *' End If 'Fin du script Wscript.quit() Voila j'espère que ca pourra servir à certain. ++ Trip Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.