jackinow Posted June 11, 2008 Share Posted June 11, 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 Link to comment Share on other sites More sharing options...
Spaz001 Posted June 17, 2008 Share Posted June 17, 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. Link to comment Share on other sites More sharing options...
jackinow Posted June 8, 2009 Author Share Posted June 8, 2009 N'étant pas un pro du script, tu le reformerais comment donc? Ouais dsl, je sais, c'est un peu vieux Link to comment Share on other sites More sharing options...
Spaz001 Posted June 8, 2009 Share Posted June 8, 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 Link to comment Share on other sites More sharing options...
Tripspirit Posted March 3, 2010 Share Posted March 3, 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 Link to comment Share on other sites More sharing options...
Tripspirit Posted March 4, 2010 Share Posted March 4, 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 Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.