Citation :
'==========================================================================
'
' 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
|