|
Si vous êtes Administrateur d'un domaine et que vous devez entre autre gérer les systèmes d'impression, voici une solution pour avoir une redondance et une sauvegarde des serveurs d'impression de votre réseau.
1ère étape créer le premier serveur, que je nommerais pour l'exercice PRINTSERV01 avec toutes les imprimantes que les utilisateurs peuvent utiliser, avec les droits et les paramètres. Microsoft met un outil à disposition pour migrer ces serveurs d'impression sans avoir besoin de tout réinstaller. Nous allons l'utiliser pour dupliquer et sauvegarder le(s) serveur(s).
télécharger la dernière version de PrintMig sur le site officiel
Pour l'exemple je crée un répertoire "printmig" sur notre premier serveur PRINTSERV01 que je partage, "printmig$" pour des raisons d'accès depuis les autres serveurs d'impression. Vous pouvez aussi utiliser le partage administratif c$. Bien sûr que si vous avez un serveur dédié aux sauvegardes, vous pouvez directement placer le fichier de sauvegarde sur son disque. Cependant il sera pratique que les autres serveurs puissent y accéder.
Dans ce répertoire nous allons créer un batch qui utilise Printmig.exe pour faire la sauvegarde de votre serveur d'impression, que je nommerai "sauvegarde.bat". Ce sciript crée un fichier .CAB avec le nom de votre serveur (dans notre cas PRINTSERV01.CAB) sous c:\PrintMig. Pour avoir les informations d'utilisation de Printmig, exécuter printmig.exe /? Ou lisez la documentation fournit sur le site officiel.
%SystemDrive%\PrintMig\printmig.exe -b %SystemDrive%\PrintMig\%COMPUTERNAME%.cab \%COMPUTERNAME%
Nous utiliserons le même batch chaque semaine (ou journalier, dépendra de la fréquence d'installation des périphériques d'impression) pour faire un export que l'on utilisera pour importer sur les autres serveurs d'impression.
Sur les serveurs de redondance, nous copions la structure c:\printmig\printmig.exe. Par contre pas besoin de le partager, puisque ces serveurs ne vont qu'importer les paramètres du serveur primaire, ils ne sont qu'une pâle copie du premier.
Attention! Lors de l'importation des imprimantes, si vous utilisez des pilotes en mode noyaux, il faut désactiver l'interdiction de l'importation de tels pilotes dans les stratégies locale du serveur: méthode : Exécuter -> gpedit.msc
De cette façon en ayant plusieurs serveurs, vous pouvez diminuer les charges sur un serveur et les équilibrer de façon qu'un service ou département utilise tel serveur ou l'autre ou encore le troisième.
Et nous créons un même genre de batch que celui de la sauvegarde mais l'importation reprendra les valeurs sauvées par le premier.
Il est pu plus compliquer car il est préférable de tout effacer : fichiers et base de registre avant de restaurer.
@echo off
cls
::définir le nom du serveur source
SET SERVSOURCE=PRINTSERV01
:: Arrêt du service d'impression (spooler) /!\ Attention langue du système
net stop "Spouleur d'impression"
::1. supprimer les clés dans la base de registre:
%windir%regedit.exe /s C:\PrintMig\delreg.reg
::2. Vider le dossier : C:\WINNT\system32\spool\PRINTERS et spool\driversw32x86
DELTREE.EXE /y %windir%\system32\spool\PRINTERS\*.*
DELTREE.EXE /y %windir%\system32\spool\driversw32x86\*.*
::3. Redémarrer le service d'impression (spooler) /!\ Attention langue du système
net start "Spouleur d'impression"
::4. Importer la sauvegarde du premier serveur
C:\PrintMig\printmig.exe -r \%SERVSOURCE%\PrintMig$\%SERVSOURCE%.cab \%COMPUTERNAME%
Il faudra rajouter un REG pour la surpression des clés qui est appelé par notre batch qui doit contenir
Registry Editor Version 5.00
[-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\windows
NT x86\Drivers\Version-2]
[-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows
NT x86\Drivers\Version-3]
[-HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Print\Monitors\Standard
TCP/IP Port\Ports]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Print\Printers]
Jusque là, pas trop de soucis et pratiquement rien de nouveau, vous aller me dire, je suis d'accord !
Mais voilà le script VBS que je vous propose ici, qui est à utiliser avec une GPO, ou au logon script, vous permettra de balancer les utilisateurs qui utilisaient le PRINTSERV01 sur PRINTSERV02 si le premier est en panne ou ne répond pas.
Le script lance un echo (PING) sur serveur par défaut et si celui-ci ne répond pas alors il migre toutes les imprimantes connectées sur sur le serveur par défaut sur le serveur de sauvegarde. En prenant en compte, bien sûr, de l'imprimante définie par défaut par l'utilisateur. De cette façon les utilisateurs peuvent toujours imprimer et vous avez le temps de réparer celui qui est tombé en panne. Si le serveur revient sur le réseau, ou une nouvelle machine avec le même nom, alors à leur prochaine connexion au domaine, les utilisateurs vont reprendre les imprimantes connectées sur le serveur d'impression que vous avez défini par défaut.
A ce stade c'est évident que tous les serveurs doivent avoir toutes les imprimantes. Et durant la panne, le serveur restant doit un peu plus travailler, puisqu'il reçoit tout les travaux d'impression. Le but de la manœuvre et que les utilisateurs peuvent imprimer.
Prenez le script suivant et modifier les variables (lignes 12 & 13) nécessaires pour votre site, dupliquez-le a votre guise.
'==========================================================================
'
' 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 = "PRINTSERV01" '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
Discuter de cet article dans les forums. (0 Messages)
Personne n'a encore commenté cet article. |