Pb Script vbs pour basculer server impression - VB/VBA/VBS - Programmation
Marsh Posté le 06-03-2008 à 19:28:14
Ce sujet a été déplacé de la catégorie Windows & Software vers la categorie Programmation par Freds45
Marsh Posté le 07-03-2008 à 09:11:13
Excusez moi j avais poster dans windows car un sujet ressemblant avait etait dans cette rubrique.
Marsh Posté le 11-03-2008 à 14:38:05
je suis plus en stage donc ce n est plus tres important mais si vous avez quand meme la reponse je viendrai de temps en temps voir si quelqu un a repondu
Marsh Posté le 05-04-2008 à 10:53:46
as-tu changer les 2 variables ??
DefaultPrintServer = "DATA1" 'Nom netbios du serveur par défaut
BackupPrintServer = "PRINTSERV02" 'Nom netbios du serveur d'impression backup
Marsh Posté le 06-03-2008 à 13:50:49
Bonjour !
Je suis actuellement en stage dans un centre hospitalier et voila le probleme ils ont un serveur d imprimante qu il veulent formater car il a de gros soucis, donc j ai reussi grace a printmigrator 3.1 a faire un backup sur un autre PC de toute les imprimantes reseau et en cherchant sur le net j ai trouver un script qui permet de basculer sur le serveur backup si jamais le serveur d impression tombe en panne sans que les utilisateurs ne voit quoi que ce soit
Le serveur d impression tourne sous 2000 Server donc la technique de Clustering ne peut pas fonctionner apparement.
voici la souce : http://www.iwannaclick.org/index.p [...] &Itemid=32
et voici le script en question :
'==========================================================================
'
' NAME: monscript.vbs
'
' AUTHOR: sharky
' DATE : 21.02.2007
'
' COMMENT: Ce script a pour but de balancer automatiquement les imprimantes
' connectées à l'utilisation au serveur backup d'impression et retour
'
'==========================================================================
On Error Resume Next
DefaultPrintServer = "DATA1" 'Nom netbios du serveur par défaut
BackupPrintServer = "PRINTSERV02" 'Nom netbios du serveur d'impression backup
Set WSHShell = WScript.CreateObject("WScript.Shell" )
UTemp = WSHShell.ExpandEnvironmentStrings("%TEMP%" ) 'Définition de la zone de travail temporaire pour le script
'Contrôle du serveur d'impression par défaut présent
Set objShell = CreateObject("WScript.Shell" )
Set objExecObject = WSHShell.Exec _
("%comspec% /c ping -n 2 -w 800 "&DefaultPrintServer&"" )'Ping le serveur par défaut, il existe une autre possibilité mais uniquement XP/2003
Do While Not objExecObject.StdOut.AtEndOfStream
strText = objExecObject.StdOut.ReadAll()
If Instr(strText, "TTL=" ) => 1 Then 'Si dans le résultat du PING il y a au moins 1 TTL= OK
'Si serveur d'impression par défaut est atteignable
OLDSERVER = "\\" & BackupPrintServer
NEWSERVER = "\\" & DefaultPrintServer
Else
'Si serveur d'impression par défaut n'est pas atteignable
OLDSERVER = "\\" & DefaultPrintServer
NEWSERVER = "\\" & BackupPrintServer
End If
Loop
Const ForReading = 1
Const ForWriting = 2
PrinterList = UTemp&"PrinterList.txt"
const HKEY_CURRENT_USER = &H80000001
'1 crée la liste des imprimantes actuelle
ListPrinters()
'2 Ajoute les mêmes imprimantes de liste mais de NEWSERVER
AddPrinters()
'3 redéfinis l'imprimante par défaut
SetDefaultPrinter()
'4 supprime les anciennes imprimantes
DeletePrinters()
'5 Supprime le fichier list
Set objFSO = CreateObject("Scripting.FileSystemObject" )
objFSO.DeleteFile(PrinterList)
WScript.Quit
'**************************************************************************************
Sub ListPrinters()
Set objFSO = CreateObject("Scripting.FileSystemObject" )
Set objDestinationFile = objFSO.OpenTextFile(PrinterList, ForWriting, true) Set WshNetwork = WScript.CreateObject("WScript.Network" )
Set oPrinters = WshNetwork.EnumPrinterConnections For i = 0 to oPrinters.Count - 1 Step 2
Printer = oPrinters.Item(i+1)
If UCase(Left(Printer,Len(OLDSERVER)))=OLDSERVER Then
PrinterName=Replace(UCase(Printer),OLDSERVER & "","" )
objDestinationFile.Writeline PrinterName
End If
Next
objDestinationFile.Close
End Sub
'**************************************************************************************
Sub AddPrinters()
Set objFSO = CreateObject("Scripting.FileSystemObject" )
Set objSourceFile = objFSO.OpenTextFile(PrinterList, ForReading) Set WshNetwork = WScript.CreateObject("WScript.Network" ) Do Until objSourceFile.AtEndOfStream
PrinterName = objSourceFile.ReadLine
NewPrinter = NEWSERVER & "" & PrinterName
WshNetwork.AddWindowsPrinterConnection NewPrinter
Loop
objSourceFile.Close
End Sub
'**************************************************************************************
Sub SetDefaultPrinter()
strComputer = "."
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "rootdefault:StdRegProv" ) strKeyPath = "SoftwareMicrosoftWindows NTCurrentVersionWindows"
strValueName = "Device"
oReg.GetStringValue HKEY_CURRENT_USER,strKeyPath,strValueName,strValue If UCase(Left(strValue,Len(OLDSERVER)))=OLDSERVER Then
PrinterName=Replace(UCase(strValue),OLDSERVER & "","" )
Name = Split(PrinterName,"," )
strKeyPath = "SoftwareMicrosoftWindows NTCurrentVersionDevices"
strDeviceName = NEWSERVER & "" & Name(0)
oReg.GetStringValue HKEY_CURRENT_USER,strKeyPath,strDeviceName,SpoolName strKeyPath = "SoftwareMicrosoftWindows NTCurrentVersionWindows"
strValueName = "Device"
strValue = NEWSERVER & "" & Name(0) & "," & SpoolName
oReg.SetStringValue HKEY_CURRENT_USER,strKeyPath,strValueName,strValue
End If
End Sub
'**************************************************************************************
Sub DeletePrinters()
Set objFSO = CreateObject("Scripting.FileSystemObject" )
Set objSourceFile = objFSO.OpenTextFile(PrinterList, ForReading) strComputer = "." Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "rootdefault:StdRegProv" ) Do Until objSourceFile.AtEndOfStream
PrinterName = objSourceFile.ReadLine strServer = Replace(OLDSERVER,"\\","" )
strKeyPath = "PrintersConnections,," & strServer & "," & PrinterName
oReg.DeleteKey HKEY_CURRENT_USER, strKeyPath strKeyPath = "SoftwareMicrosoftWindows NTCurrentVersionDevices"
strDeviceName = OLDSERVER & "" & PrinterName
oReg.DeleteValue HKEY_CURRENT_USER, strKeyPath,strDeviceName strKeyPath = "SoftwareMicrosoftWindows NTCurrentVersionPrinterPorts"
strPrinterPortName = OLDSERVER & "" & PrinterName
oReg.DeleteValue HKEY_CURRENT_USER, strKeyPath,strPrinterPortName
Loop
objSourceFile.Close
End Sub
PS : j ai telecharger VBFactory et fait un debogage donc les erreurs qui se generai etait je pense un probleme de retour a la ligne mais il reste d autre erreur et je cale sur ca etabnt debutant dans ce domaine.
Si je n ai pas ete assez clair sur certains point dites le moi je vous renseignerai
Merci d avance pour vos reponses.
Message édité par axxel88 le 07-03-2008 à 15:07:24