Serveur d'impression

Lister une imprimante dans Active Directory à l'aide d'un CNAME – La vie semi-professionnelle de Jason Thiede – Bien choisir son serveur d impression

Par Titanfall , le 21 février 2020 - 9 minutes de lecture

(Voir également le commentaire de David ci-dessous, qui utilise le module natif ActiveDirectory)

C'était amusant pour moi…

L'une des grandes questions que nous traitons maintenant est de savoir comment rendre les imprimantes faciles à localiser sur le réseau. Traditionnellement, les utilisateurs ne mappaient une imprimante que par chemin UNC. Cela n'est pas toujours utile lors de l'identification de l'emplacement et des caractéristiques. Bien que nos imprimantes soient publiées dans Active Directory, la recherche dans le répertoire d'une imprimante n'est pas une pratique courante. Je dois en prendre une partie du blâme car j'ai travaillé pendant plusieurs années à notre Help Desk et renforcé cette méthode. Maintenant, j'essaie de convaincre les autres que la navigation dans le répertoire est beaucoup plus simple et permet une plus grande liberté de dénomination de l'imprimante (c'est-à-dire que l'inclusion d'informations sur l'emplacement dans le nom de l'imprimante n'est plus critique).

Cependant, après avoir expliqué comment répertorier plus de 20 imprimantes de répertoires dans le premier écran «Assistant Ajout d'imprimante» de Windows 7 (http://community.spiceworks.com/how_to/show/1374), j'ai découvert un problème: lors de la navigation dans le , Windows va mapper l'imprimante via le nom Windows de son serveur d'impression, plutôt qu'un CNAME (ou un alias). C'est en quelque sorte une évidence lorsque vous considérez comment ces informations pénètrent dans AD depuis le serveur, mais c'est un point important à noter. Pourquoi c'est un problème? Nous utilisons un alias pour les mappages d'imprimantes afin de pouvoir échanger les serveurs d'impression sans interrompre toutes les impressions. Si tout le monde mappe directement sur le nom Windows du serveur, il perdra son mappage lorsque ce serveur sera remplacé. D'autres boutiques informatiques utilisent le round-robin DNS pour équilibrer la charge des serveurs d'impression. L'ajout d'une imprimante à partir du navigateur annule cet avantage.

Il y a deux options à ce stade. Tout d'abord, vous pouvez choisir d'ajouter manuellement les imprimantes à AD. Cela vous permet de modifier le chemin UNC et le nom du serveur sans problème. Cependant, il ne met pas à jour automatiquement les fonctionnalités, le modèle, l'emplacement, etc. Lorsque vous choisissez «Liste dans le répertoire» sur le serveur d'impression, tout cela est géré automatiquement. La deuxième option, que je suggère, consiste à laisser le serveur d'impression répertorier vos imprimantes et les mettre à jour pour vous. Cela, bien sûr, nécessite une solution de contournement pour l'alias.

La quête de l'option 2

Naturellement, j'ai frappé les googles. Lorsque quelques recherches n'ont abouti à rien, j'ai réalisé: Toutes ces informations sont dans AD et doivent être accessibles. Je me suis tourné vers les applets de commande AD de Quest et j'ai commencé à explorer les propriétés de l'objet AD connu sous le nom de «file d'attente d'impression». J'ai été surpris de trouver ces objets imbriqués dans le conteneur du serveur d'impression. Trois propriétés m'importaient: nom du serveur, shortServerName, et uNCName (capitalisation intéressante, soit dit en passant). Au final, la seule propriété de cette liste qui détermine le chemin réseau vers le serveur est uNCName. Mais, les autres propriétés sont bonnes à mettre à jour à des fins d'affichage.

En utilisant Quest Active Roles, j'ai pu mettre à jour les propriétés pertinentes:








set-QADobject CN = SOMESERVER-SomePrinter, CN = SOMESERVER, OU = Servers, DC = domain, DC = com -objectattributes @ servername = "prints.domain.com"; shortservername = "prints"; uNCName = "\ prints .domain.com  SomePrinter "

Vous pouvez également utiliser le nom de l'imprimante au lieu de son nom unique. Par exemple, au lieu de «CN = SOMESERVER-SomePrinter, CN = SOMESERVER, OU = Servers, DC = domain, DC = com», vous pouvez simplement utiliser «SOMESERVER-SomePrinter». Dans la plupart des organisations, cela doit être suffisamment distingué.

Script de mise à jour à l'échelle du répertoire








#Ajouter le composant logiciel enfichable Quest Active Roles AD Management, mais continuer en silence en cas d'échec
 Add-PSSnapin Quest.ActiveRoles.ADManagement -EA 0

#Variables pour les vrais noms des serveurs d'impression, basées sur le DN
 $ PrintServersDN = @ ("CN = SOMESERVER-SomePrinter, CN = SOMESERVER, OU = Servers, DC = domaine, DC = com")
 $ PrintServersDNS = @ ()

#Variables pour le CNAME / alias du serveur d'impression
 $ PrintServerAlias ​​= "imprime"
 $ PrintServerAliasDnsSuffix = "domaine.com"
 $ PrintServerAliasLong = "$ PrintServerAlias. $ PrintServerAliasDnsSuffix"

#Obtenez tous les noms de domaine complets des serveurs d'impression et ajoutez-les au tableau $ PrintServersDNS
 ForEach ($ s dans $ PrintServersDN)  select DnsName) .DnsName.tolower ()
 $ PrintServersDNS + = $ serverDNS
 

$ printers = get-qadobject -type printqueue -includeallproperties | où $ PrintServersDNS -contains $ _. servername

If ($ printers -ne $ null) 

Foreach ($ p dans $ imprimantes) 
 $ printShareName = $ p.printsharename
 $ printerDN = $ p.DN
 $ uncName = "\ $ PrintServerAliasLong  $ printShareName"
 set-QADobject $ printerDN -objectattributes @ servername = "$ PrintServerAliasLong"; shortservername = "$ PrintServerAlias"; uNCName = "$ uncName"
 
 

Sinon Write-Host "Aucune modification à apporter"

J'étais excité par les résultats. L’Assistant Ajout d’imprimante a récupéré le nouvel alias et mappé l’imprimante en fonction de l’alias du serveur. Le mauvais côté? Chaque fois que je modifiais la configuration de la file d'attente d'impression, le serveur (comme mentionné précédemment) mettait automatiquement à jour AD avec le nom Windows du serveur d'impression. C’est à ce moment que le merveilleux Planificateur de tâches est venu à mon secours. Je pourrais simplement configurer une tâche déclenchée par 306 événements dans Microsoft> Windows> PrintService> Journal opérationnel. Mais cela a pris beaucoup plus d'études et de brainstorming que ce à quoi je m'attendais. Et j'ai appris beaucoup plus sur le Planificateur de tâches.

Voici la grande question: "Comment puis-je exécuter un script à chaque fois que la configuration d'une imprimante change sans avoir à mettre à jour le répertoire entier à chaque fois?" Comme j'ai envisagé de déclencher un seul événement qui avait eu une pause suffisamment longue pour couvrir tous les changements, même lors d'une mise à jour en masse, je suis tombé sur ce post: http://blogs.technet.com/b/otto/archive/2007/ 11/09 / find-the-event-that-triggered-your-task.aspx. Il montre comment créer et extraire des variables d'une tâche planifiée à l'aide de requêtes de valeur. Ce n'est peut-être pas nouveau pour vous, mais c'était pour moi. Bien nouvelles. J'ai pu écrire un script (partagé ci-dessous) qui se déclenche à chaque changement de configuration d'imprimante et met à jour uniquement cette imprimante. Ensuite, j'ai frappé un autre mur: une condition de course. Lorsque le script se déclenchait immédiatement, il ne détectait aucun changement dans AD en raison de la réplication ou d'une écriture retardée. Retarder la tâche de 30 secondes a fait l'affaire. Ce n'est pas parfait, mais ça marche. Vous pouvez modifier vos propres paramètres. Je dois juste éviter de changer deux imprimantes à moins de 45 secondes d'intervalle.

Script de mise à jour unique








Param (
[string]$ PrinterName
)

#Ajouter le composant logiciel enfichable Quest Active Roles AD Management, mais continuer en silence en cas d'échec
Add-PSSnapin Quest.ActiveRoles.ADManagement -EA 0

# Obtenir le nom de partage de l'imprimante (au cas où il serait différent du nom de l'imprimante)
$ PrinterShareName = (Get-ItemProperty hklm:  system  currentcontrolset  control  print  printers  $ PrinterName). "Nom de partage"

#Variables pour les vrais noms du serveur d'impression
$ PrintServer = (Get-Item env: nom_ordinateur) .Valeur
$ PrintServerDNS = (Get-QADComputer $ PrintServer) .DnsName

#Variables pour le CNAME / alias du serveur d'impression
$ PrintServerAlias ​​= "imprime"
$ PrintServerAliasDnsSuffix = "domaine.com"
$ PrintServerAliasLong = "$ PrintServerAlias. $ PrintServerAliasDnsSuffix"

#Trouver l'objet imprimante dans AD
$ PrinterADname = "$ PrintServer- $ PrinterShareName"
$ PrinterADobject = Get-QADObject -Type printqueue $ PrinterADname -IncludeAllProperties | où $ _. servername -eq $ PrintServerDNS

If ($ PrinterADobject -ne $ null) 

$ printerDN = $ PrinterADobject.DN
$ uncName = "\ $ PrintServerAliasLong  $ PrinterShareName"
set-QADobject $ printerDN -objectattributes @ servername = "$ PrintServerAliasLong"; shortservername = "$ PrintServerAlias"; uNCName = "$ uncName"
Hôte d'écriture "Terminé"


Sinon Write-Host "Aucune modification à apporter"

Veuillez noter que ce script est destiné à Server 2008. Server 2003 stocke son imprimante ailleurs dans le Registre. Lors de la modification du script pour détecter et répondre à Server 2003 et Server 2003 x64, j'ai réalisé qu'il ne serait probablement pas utile de toute façon en tant qu'événement déclenché.

Pour terminer le processus, j'ai créé une tâche (en suivant les étapes du blog Technet lié ci-dessus) qui a défini «param1» sur la variable de la tâche «$ (param1)». Cela a été transmis en tant que variable de paramètre «$ PrinterName» dans le script PowerShell. Voici la requête de valeur que j'ai créée dans la tâche:



Événement / UserData / PrinterSet / Param1


Les autres configurations comprenaient la définition de la tâche pour se retarder de 30 secondes et ne pas lancer une nouvelle instance si elle était déclenchée. Sinon, vous pouvez obtenir 20 processus parallèles. C’est essentiellement ça:

  1. Créez votre script
  2. Créez une tâche planifiée basée sur un événement 306 dans PrintService> Journal opérationnel, retardez-la de 30 secondes et assurez-vous qu'elle transmet le paramètre de nom d'imprimante à votre script

Le script à l'échelle du répertoire est bon pour le nettoyage, mais le script de mise à jour unique est meilleur pour les mises à jour régulières. Cela devrait maintenir votre répertoire à jour avec votre ou vos serveurs d'impression CNAME.

Click to rate this post!
[Total: 0 Average: 0]

Commentaires

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.