Migration des serveurs d'impression et des mappages d'impression utilisateur – Serveur d’impression

Comment j'ai migré plus d'un millier d'utilisateurs vers nos nouveaux serveurs d'impression…

Sommaire

Ce didacticiel complet, étape par étape, explique comment migrer vers un nouveau serveur d'impression sans interruption de service. Cette procédure de migration fournit une intégration transparente du nouveau système tout en éliminant progressivement l'ancien serveur. Cette migration est réalisée à l'aide de la console de gestion d'impression, des outils de migration d'imprimante et des scripts.

S'applique à: Serveurs d'impression Microsoft Windows (2003/2008 / 2008r2 / 2012, bien que de nouvelles méthodes powershell soient disponibles dans Server 2012)

Migration d'imprimante

Ce guide suppose que vous avez créé un nouveau serveur d'impression et que toutes les nouvelles imprimantes sont créées et partagées à partir du nouveau serveur. Le guide suivant explique la suppression progressive de l'ancien serveur d'impression.

Exporter des imprimantes

Pour cette migration, nous allons utiliser la console MMC de gestion d'impression figurant dans vos outils d'administration.

* Vous pouvez également utiliser l'outil de ligne de commande printbrm.exe pour exporter / importer des imprimantes si vous rencontrez des problèmes avec la MMC de gestion de l'impression. Si vous rencontrez des problèmes avec les deux, vous devrez scripter l'exportation / importation des ports et des partages d'imprimante. Malheureusement, tous les pilotes devront être installés manuellement sans utiliser les outils de migration, à moins que vous ne puissiez trouver un script sophistiqué capable de gérer cette tâche.

1. Ouvrez la MMC Gestion de l’impression:

2. Cliquez avec le bouton droit sur Serveurs d'impression et ajoutez vos serveurs d'impression:

3. Cliquez avec le bouton droit sur l’ancien serveur d’impression et choisissez Exporter les imprimantes dans un fichier:

Importer des imprimantes

1. Cliquez avec le bouton droit sur le nouveau serveur d’imprimante et choisissez «Importer des imprimantes depuis un fichier…».

Vérifier les configurations correspondantes

Avant de configurer les scripts pour remapper les imprimantes utilisateur, vous devez vérifier que tous les partages d'impression, pilotes (x86 / x64) et ports existent et sont configurés correctement sur le nouveau serveur.

Cela peut être fait assez facilement en exportant des listes à l'aide de la MMC Gestion de l'impression.

Sous chaque serveur d'impression, cliquez simplement sur Pilotes, Formulaires, Ports ou Imprimantes, puis cliquez sur Exporter la liste, puis comparez la liste de l'ancien serveur à la liste du nouveau serveur.

Ajoutez / corrigez manuellement les pilotes, formulaires, ports ou imprimantes manquants.

* Si les utilisateurs ne disposent pas des autorisations nécessaires pour installer les pilotes d'impression, les pilotes de l'ancien serveur et ceux du nouveau serveur doivent être identiques (numéro de version, etc.).

Re-mapper les imprimantes utilisateur

Nous utiliserons ici les scripts d’ouverture de session pour remapper les imprimantes des utilisateurs tout en préservant leur imprimante par défaut sans qu’ils ne le sachent jamais. Si vous n’avez pas exporté les listes des deux serveurs d’imprimante de la dernière section, faites-le maintenant. Nous allons utiliser ces listes pour former un nouveau fichier texte pour notre script.

Préparer des listes

Vous devrez créer un fichier texte (.txt) pour le script à référencer. Ce fichier texte doit être placé sur un partage réseau auquel tous les utilisateurs ont accès, ainsi que le script expliqué dans la section suivante. J'ai nommé mon fichier texte «qchanges.txt». Le fichier texte doit être formaté avec l'ancienne URL de partage d'impression à gauche et la nouvelle URL de partage d'impression à droite, et séparé par un point-virgule avec chaque élément de la nouvelle ligne, comme ceci:





 oldserver  printer1;  newserver  printer1
 oldserver  printer2;  newserver  printer2
 oldserver  hp-thirdfloor;  serveur de nouvelles  hp-thirdfloor
 oldserver  ancien-nom-imprimante;  serveur de nouvelles  nouveau-nom-imprimante

Vous devriez voir le modèle ici. Le script s’exécutera lorsque l’utilisateur se connectera et recherchera l’ensemble du fichier texte pour voir si l’une des imprimantes actuellement mappées de l’utilisateur correspond à l’un des noms de partage restants du point-virgule. Si le script trouve une correspondance, il déconnectera cette imprimante et mappera le partage d'impression à droite du point-virgule. Le script préservera également l’imprimante par défaut de l’utilisateur dans le cas où plusieurs imprimantes sont mappées.

Préparer des scripts

J'ai utilisé une combinaison de scripts pour compléter notre migration. Si vous êtes un gourou des scripts, n'hésitez pas à les modifier et à les combiner, mais je n'ai pas eu envie de prendre le temps de le faire. De plus, je ne connais pas très bien vbScipt… J'ai appris PowerShell comme premier langage de script.

* Assurez-vous de faire attention à la façon dont ces scripts se référencent. Vérifiez les variables de script.
* Vérifier les autorisations pour accéder à l'emplacement du script pour tous les utilisateurs
* Vérifiez les autorisations des utilisateurs pour mapper les imprimantes ou installer de nouveaux pilotes s'ils diffèrent de l'ancien serveur.
* Ce script est un peu lent, donc laissez-lui le temps de courir avant de conclure qu’il n’a rien fait.

Ce vbScript fait le travail et j'ai nommé le mien “qchanges.vbs”. Ce script accepte plusieurs arguments, mais dans mon cas, je n'ai utilisé que deux arguments, l'un pour l'emplacement du fichier texte et l'autre pour masquer les actions de l'utilisateur (nologo). C'est la commande que j'ai utilisée: “qchanges.vbs qchanges.txt // nologo”

Script VB:





En cas d'erreur, reprise suivante
Const VERBOSE = "N" 'Progression de l'affichage (Y ou N)
Const Title = "Print Connection Migrator"
Const ForReading = 1

Dim strDefaultPrinter
Tableau des noms d'imprimantes de Dim InstalledPrinters
Dim Textfile 'Fichier avec les noms Q d'impression
Dim OldPrintQueues () 'Tableau dynamique pour stocker les anciens noms de file d'attente d'impression, à partir du fichier texte
Dim NewPrintQueues () 'Tableau dynamique pour stocker les nouveaux noms de file d'attente d'impression, à partir du fichier texte
Dim fso 'objet système de fichiers
Dim objTextFile 'Objet de fichier texte
Dim strNextLine 'Ligne du fichier texte
Dim i
Dim WshNetwork

Définir WshNetwork = CreateObject ("WScript.Network")

'1. - Récupère les arguments de la ligne de commande ###
SET Parameters = Wscript.arguments

'Si aucun argument de ligne de commande fourni, quittez
Si Parameters.Count = 0 alors
WScript.Quit (1)
Autre
Textfile = Parameters.item (0)
Fin si

Si Textfile = "" ou Not Right (TextFile, 4) = ".txt" ou Not FileExist (Textfile), alors
Error = MsgBox ("Aucun fichier d'entrée valide fourni. Arrêt du script maintenant.", Vbokonly, Title)
WScript.Quit (1)
Fin si

Si VERBOSE = "Y" Alors Wscript.Echo "Lecture du fichier d'entrée"
'2. Lisez le fichier texte et importez-le dans un tableau ###
Définir objFSO = CreateObject ("Scripting.FileSystemObject")
Définir objTextFile = objFSO.OpenTextFile (TextFile, ForReading)
i = -1

Bien que non objTextFile.AtEndOfStream
i = i + 1
Redim Preserve OldPrintQueues (i)
ReDim Conserver NewPrintQueues (i)
strLine = objTextFile.Readline
'N'importez pas les lignes de commentaire
Si laissé (strLine, 2) = "" alors
OldPrintQueues (i) = Left (strLine, InStr (strline, ";") - 1)
Si VERBOSE = "Y" alors Wscript.Echo "ancien Q est:" & OldPrintQueues (i)
NewPrintQueues (i) = Mid (strline, InStr (strline, ";") + 1, Len (strline))
Si VERBOSE = "Y" Alors Wscript.Echo "nouveau Q est:" & NewPrintQueues (i)
Fin si
Wend

objTextFile.Close

'3. Enregistrez le nom de l'imprimante par défaut ###

strDefaultPrinter = DefaultPrinter
Si VERBOSE = "Y" Alors Wscript.Echo "Le défaut est:" & strDefaultPrinter

'4. Requête WMI pour les connexions d'imprimante actuelles ###

strComputer = "."
Définissez objWMIService = GetObject ("winmgmts:" _
& "impersonationLevel = emprunt d'identité! " & strComputer & " root  cimv2")
Définissez colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer")

'5. Boucle principale dans la collection d’imprimantes ###

Pour chaque objPrinter dans colInstalledPrinters
Si VERBOSE = "Y" Alors Wscript.Echo "Connexion actuelle:" & objPrinter.Name
Si laissé (objPrinter.Name, 2) = "" Then 'ne fonctionne que sur les imprimantes réseau
'Recherchez l'imprimante correspondante et créez-la
i = 0 'définit l'indice au début du tableau (prépare la boucle)
Faire jusqu'à i> UBound (OldPrintQueues)
Si UCase (objPrinter.Name) = UCase (OldPrintQueues (i)), alors
'Créer la connexion à la nouvelle imprimante
Si VERBOSE = "Y" Alors Wscript.Echo "Nouvelle connexion:" & NewPrintQueues (i)
WshNetwork.AddWindowsPrinterConnection NewPrintQueues (i)
Si UCase (strDefaultPrinter) = UCase (objPrinter.Name) Alors 'Ceci est l'imprimante par défaut
'Définir l'imprimante par défaut
WshNetwork.SetDefaultPrinter NewPrintQueues (i)
Fin si
'Supprimer la connexion de l'imprimante
WshNetwork.RemovePrinterConnection objPrinter.Name
Si VERBOSE = "Y" Alors Wscript.Echo "Suppression:" & objPrinter.Name
Fin si
i = i + 1
Boucle
Fin si 'Fin de vérification pour les imprimantes réseau
Next 'Fin de la boucle sur les imprimantes de cet utilisateur

Définir WshNetwork = Nothing

'-----------------
' Les fonctions
'-----------------

'Renvoyer l'imprimante par défaut
Fonction DefaultPrinter
Dim strComputer
Résultat faible

strComputer = "."
Résultat = ""

Définissez objWMIService = GetObject ("winmgmts:" _
& "impersonationLevel = emprunt d'identité! " & strComputer & " root  cimv2")
Définissez colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer")
Pour chaque objPrinter dans colInstalledPrinters
Si objPrinter.Default = True alors
Résultat = nom_imprimante_journal
Fin si
Prochain
DefaultPrinter = Résultat
Fonction de fin

'-----------------

'Est-ce que le fichier existe (Booléen)
Fonction FileExist (FileFullPath)
Dim Fso
Set Fso = CreateObject ("Scripting.FileSystemObject")
Si (Fso.FileExists (FileFullPath)) alors
FileExist = True
Autre
FileExist = False
Fin si
Fonction de fin

'Basé sur un scénario de: Sébastien Pittet (pittet.org)
'discuté à http://cwashington.netreach.net/

'Creative Commons Attribution-ShareAlike 2.5
'http://creativecommons.org/licenses/by-sa/2.5/

'Simon Sheppard septembre 2005
'http://ss64.com/vb/syntax-qchange.html
Scripts de test

1. Testez d'abord ce script sur votre ordinateur local.

2. Testez ce script sur un petit groupe en créant et en exploitant un groupe Active Directory via un script de connexion ou un objet de stratégie de groupe.

* Assurez-vous que les imprimantes ont été remappées correctement et que l'imprimante par défaut a été préservée.

Implémenter des scripts

J'ai choisi de créer un groupe Active Directory appelé «User-Printer-Migration» et le script d'ouverture de session ne l'exécutait que sur les utilisateurs de ce groupe. J'ai ensuite ajouté les différents groupes d'organisation à différents moments pour déployer la migration par étapes en cas de problème.

Nous avons eu quelques problèmes, mais j’estimerais que le succès total était d’environ 98%. Un utilisateur s'est retrouvé avec toutes les imprimantes de la liste et sur quelques ordinateurs, il n'a rien fait.

Je considère ces quelques occurrences comme négligeables dans l’image globale en raison du temps gagné.

Complet et nettoyage

Une fois que vous avez étendu cela à l'ensemble de votre réseau, il est temps de nettoyer Active Directory et de vous débarrasser définitivement de votre ancien serveur d'impression.

Surveiller l'utilisation de l'ancien serveur

Retournez voir l'ancien serveur d'impression. Vous pouvez utiliser le journal des événements sur l'ancien serveur pour voir quand il a reçu les derniers travaux d'impression et sur quelle imprimante. J'ai utilisé PowerShell pour y parvenir.

Vous pouvez activer «Enregistrer les informations du spouleur» dans les «Propriétés du serveur» du spouleur d’impression. Vous obtiendrez une entrée du journal des événements système, source «Imprimer», tapez «Information», ID d’événement 10, à la fin du travail d’impression. Cet événement contiendra des détails sur l'utilisateur, l'imprimante, la taille du travail et le nombre de pages imprimées.

Voici un script PowerShell que j'ai utilisé pour cela:





$ server = read-host "De quel serveur d'impression souhaitez-vous collecter les événements d'impression?"
$ CSVsave = read-host "Où souhaitez-vous enregistrer la sortie CSV? (Ex d:  prntsrv.csv)"

$ StartDate = get-date 20/03/14
$ EndDate = get-date 04/01/14

Get-EventLog -LogName Système -Ordinateur $ serveur -Source print -Après $ StartDate -Before $ EndDate | où $ _. EventID -eq 10 | sélectionnez Source, EventID, MachineName, UserName, Message | export-csv $ CSVsave

Re-mappez tous les utilisateurs qui utilisent encore l’ancien serveur et lorsque les tâches ne sont plus envoyées à l’ancien serveur d’impression, il est temps de le mettre hors service.

Mise hors service de l'ancien serveur d'impression

Je recommande d’arrêter temporairement l’ancien serveur d’impression / serveurs pour voir s’il ya des problèmes. S'il n'y a pas de plaintes, il est temps de:

– Arrêtez l'ancien serveur
– Supprimer toutes les entrées AD faisant référence à l'ancien serveur
– Supprimez l'ancien serveur de tout autre système tel que SCCM ou SolarWinds

Félicitations!!

(function(d, s, id) var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "http://connect.facebook.net/en_US/sdk.js"; fjs.parentNode.insertBefore(js, fjs); (document, 'script', 'facebook-jssdk'));

Migration des serveurs d'impression et des mappages d'impression utilisateur – Serveur d’impression
4.9 (98%) 32 votes