Aller au contenu

Script migration d'imprimante


jackinow

Messages recommandés

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 :cartonjaune:

Merci d'avance =)

ps: il n'aime pas à partir de la ligne en gras

Lien vers le commentaire
Partager sur d’autres sites

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. :transpi:

Lien vers le commentaire
Partager sur d’autres sites

  • 11 mois après...

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

  • 8 mois après...

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

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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...