Gérer DNS dans un environnement Windows à l'aide de PowerShell – Bien choisir son serveur d impression
Sommaire: Gérez DNS dans un environnement Windows à l'aide de Windows PowerShell. Le blogueur invité Richard Siddaway montre comment le faire de manière simple et efficace.
Hé, le scripteur! Que puis-je faire avec Windows PowerShell pour gérer mon infrastructure DNS?
– RS
Bonjour RS,
Microsoft Scripting Guy Ed Wilson ici. Je suis heureux d'annoncer qu'il s'agit de la semaine des blogueurs invités. J'adore accueillir ces blogueurs invités car ils donnent à nos lecteurs un aperçu de l'esprit et des connaissances d'autres professionnels. Aujourd'hui, nous avons Richard Siddaway. Richard est architecte technique pour Serco au Royaume-Uni. Il travaille sur des projets de transformation dans le gouvernement local et l'arène commerciale. Avec plus de 20 ans d'expérience dans divers aspects des technologies de l'information, Richard est spécialisé dans l'environnement Microsoft au niveau architectural, en particulier autour d'Active Directory, Exchange, SQL Server et l'optimisation d'infrastructure.
Richard est toujours à la recherche de l'opportunité d'automatiser un processus, de préférence avec Windows PowerShell. Richard a fondé et dirige actuellement le groupe d'utilisateurs britannique Windows PowerShell. Microsoft a reconnu son expertise technique et ses activités communautaires en lui décernant un prix Microsoft Most Valued Professional. Richard a fait une présentation à la Conférence des experts de l'annuaire, lors de divers événements chez Microsoft au Royaume-Uni et en Europe, et pour d'autres groupes d'utilisateurs britanniques. Il a un certain nombre d'articles et de publications techniques à son actif, et son premier livre imprimé a récemment été publié. L'objet? Windows PowerShell, bien sûr.
Blog: http://msmvps.com/blogs/RichardSiddaway/Default.aspx
Détails du livre: http://www.manning.com/siddaway
À emporter, Richard…
_______
RS, la réponse courte à la question sur l'utilisation de Windows PowerShell pour gérer le DNS est que vous pouvez faire tout ce que vous voulez. La réponse la plus longue est que vous devez y travailler un peu. Certains domaines de travail avec DNS ont déjà été abordés par Ed Wilson des Microsoft Scripting Guys. Voici les liens vers ses articles:
Windows PowerShell n'a aucun moyen de travailler directement avec DNS. Cependant, il existe un grand ensemble de classes WMI. Ils sont installés automatiquement lorsque DNS est installé. À ce stade, vous pourriez gémir "Je n'aime pas WMI; c'est trop dur". C'était le cas. Windows PowerShell dispose d'une excellente prise en charge WMI qui rend son utilisation facile et vaut bien la peine de passer un peu de temps à apprendre, comme vous le verrez.
Un nouvel espace de noms est créé pour les classes DNS WMI: root MicrosoftDNS. Parce que nous utilisons WMI, nous pouvons accéder à distance au serveur DNS (ce qui facilite l'administration). Les classes disponibles pour travailler avec DNS peuvent être trouvées en utilisant Windows PowerShell:
Get-WmiObject -Namespace root MicrosoftDNS -Liste
Les classes DNS d'un serveur DNS distant s'exécutant sur un contrôleur de domaine Windows Server 2008 sont illustrées dans l'image suivante.
Dans un environnement Windows moderne, la plupart des machines enregistrent leurs propres adresses avec DNS (il se peut que nous devions définir des enregistrements de recherche inversée – PTR – via DHCP). Il est toujours nécessaire de créer des enregistrements DNS de temps en temps, comme si vous devez créer un enregistrement d'alias. Vous disposez d'un certain nombre de classes WMI pour travailler avec différents types d'enregistrement DNS, que vous pouvez voir ici:
Get-WmiObject -Namespace root MicrosoftDNS -Liste *type | À l'échelle du format -Colonne 3
MicrosoftDNS_MGType MicrosoftDNS_X25Type MicrosoftDNS_AFSDBType
MicrosoftDNS_PTRType MicrosoftDNS_KEYType MicrosoftDNS_SRVType
MicrosoftDNS_MDType MicrosoftDNS_MBType MicrosoftDNS_AAAAType
MicrosoftDNS_ISDNType MicrosoftDNS_MINFOType MicrosoftDNS_RPType
MicrosoftDNS_SIGType MicrosoftDNS_MFType MicrosoftDNS_AType
MicrosoftDNS_WKSType MicrosoftDNS_WINSRType MicrosoftDNS_SOAType
MicrosoftDNS_MXType MicrosoftDNS_WINSType MicrosoftDNS_ATMAType
MicrosoftDNS_NSType MicrosoftDNS_NXTType MicrosoftDNS_RTType
MicrosoftDNS_CNAMEType MicrosoftDNS_TXTType MicrosoftDNS_HINFOType
MicrosoftDNS_MRType
J'ai écrit différents scripts dans le passé pour travailler avec des types d'enregistrement individuels, et j'ai constaté que chaque classe a une syntaxe et des exigences légèrement différentes. Cela rend la vie difficile lorsque vous souhaitez commencer à automatiser ce processus, car vous devez avoir un script ou une fonction différente pour chaque type d'enregistrement. J'ai décidé que je voulais un script universel pour créer des enregistrements afin de pouvoir créer plusieurs enregistrements en même temps à partir d'informations minimales. Le script suivant montre la fonction que j'ai créée pour créer des enregistrements A, PTR, MX et CNAME – ce sont les plus courants avec lesquels je dois faire face. Nous utiliserons le MicrosoftDNS_ResourceRecord classe avec des entrées variables.
une fonction new-dnsrecord
param (
[string]$ serveur,
[string]$ fzone,
[string]$ rzone,
[string]$ ordinateur,
[string]$ adresse,
[string]$ alias,
[string]$ maildomain,
[int]$ priorité,
[switch]$ arec,
[switch]$ ptr,
[switch]$ cname,
[switch]$ mx
)
## vérifier DNS serveur joignable
si (-ne pas (Test-Connexion -Nom de l'ordinateur $ serveur))Jeter "Serveur DNS introuvable"
## Divisé le serveur fqdn et adresse
$ srvr = $ serveur -Divisé "."
$ addr = $ adresse -Divisé "." $ rec = [WmiClass]"\ $ ($ srvr[0]) root MicrosoftDNS: MicrosoftDNS_ResourceRecord "
##
## créer enregistrements
##
## UNE
si ($ arec)
$ text = "$ ordinateur DANS UNE adresse $"
$ rec.CreateInstanceFromTextRepresentation ($ serveur, $ fzone, $ text)
## CNAME
si ($ cname)
$ text = "$ alias IN CNAME $ computer"
$ rec.CreateInstanceFromTextRepresentation ($ serveur, $ fzone, $ text)
## PTR
si ($ ptr)
$ text = "$ ($ addr[3]). $ rzone IN PTR $ computer "
$ rec.CreateInstanceFromTextRepresentation ($ serveur, $ rzone, $ text)
## MX
si ($ mx)
$ text = "$ maildomain IN MX $ priorité $ ordinateur"
$ rec.CreateInstanceFromTextRepresentation ($ serveur, $ fzone, $ text)
Le script a été écrit à l'aide de Windows PowerShell 2.0, mais il est utilisable dans Windows PowerShell1.0 avec les modifications appropriées décrites dans le texte. Le premier changement est dans la section où nous testons la connectivité au serveur DNS (le Test de connexion cmdlet a été introduit dans la version 2.0 de Windows PowerShell). Nous pouvons surmonter ce problème en remplaçant cette ligne par celle-ci:
si ((Get-WmiObject -Requete "Sélectionnez * dans Win32_PingStatus WHERE Address =‘ $ server ’") .StatusCode -ne 0)Jeter "Serveur DNS introuvable"
Plus d'informations sur l'utilisation Win32_PingStatus peut être trouvé sur MSDN à http://msdn.microsoft.com/en-us/library/aa394350(VS.85).aspx#1
OK, choisissons cette fonction séparément. Je commence par définir un tas de paramètres. Je n'ai utilisé aucune des fonctionnalités avancées ici afin d'assurer une utilisation maximale du script. Une décision délibérée a été prise pour éviter d'utiliser des ensembles de paramètres car cela entraînerait une complexité supplémentaire lorsque je voulais créer plusieurs enregistrements. Les paramètres sont les suivants:
Paramètre |
Type |
Sens |
$ serveur |
Chaîne |
Nom de domaine complet du serveur DNS |
$ fzone |
Chaîne |
Zone de recherche directe |
$ rzone |
Chaîne |
Zone de recherche inversée |
$ ordinateur |
Chaîne |
Nom de domaine complet de l'ordinateur pour lequel nous créons une entrée DNS |
$ adresse |
Chaîne |
Adresse de l'ordinateur |
$ alias |
Chaîne |
Alias de l'ordinateur |
$ maildomain |
Chaîne |
Domaine de messagerie |
$ priorité |
Int |
Priorité de messagerie |
$ arec |
Commutateur |
Créer un enregistrement |
$ ptr |
Commutateur |
Créer un enregistrement PTR |
$ cname |
Commutateur |
Créer un enregistrement d'alias |
$ mx |
Commutateur |
Créer un enregistrement MX (serveur de messagerie) |
Je n'ai défini aucune valeur par défaut pour les paramètres. Après les définitions des paramètres, vous pouvez vérifier si le serveur DNS est joignable comme mentionné précédemment. Il est possible de tester si le service DNS était réellement en cours d'exécution en utilisant l'un ou l'autre de ces Avoir commandes:
Get-Service (Les fenêtres PowerShell 2.0 a une Nom de l'ordinateur paramètre) Get-Service -Nom DNS
WMI (Nom de l'ordinateur dans les versions Windows PowerShell 2.0 et 1.0)
Get-WmiObject -Classe Win32_Service -Filtre "Name =‘ DNS ’"
La tâche suivante consiste à diviser le serveur et l'adresse en leurs parties distinctes. Ils ont tous deux un point («.») Comme séparateur. En utilisant le -Divisé , vous devez échapper le point en utilisant la barre oblique inverse (""). Une alternative, qui fonctionnera également dans PowerShell 1.0, consiste à utiliser le Divisé() méthode du chaîne classe:
$ serveur = "server02.manticore.org"
$ adresse = "10.10.54.27"
$ srvr = $ serveur.Divisé(".")
$ addr = $ adresse.Divisé(".")
Dans ce cas, vous n'avez pas besoin du caractère d'échappement.
La dernière étape préparatoire consiste à créer une instance du MicrosoftDNS_ResourceRecord classe en utilisant le [wmiclass] type accélérateur. Un accélérateur de type est utilisé comme raccourci vers une classe .NET Framework. Dans ce cas, nous créons une instance de la System.Management.ManagementClass. En d'autres termes, vous créez une classe WMI. Lorsque vous utilisez Get-WmiObject, vous obtenez une instance d'une classe existante et Windows PowerShell renvoie un objet à partir de la System.Management.ManagementObject classe:
$ rec = [WmiClass]\ server02 root MicrosoftDNS: MicrosoftDNS_ResourceRecord$ rec | gm
En utilisant gm (un alias pour Get-Member), nous pouvons voir la classe d'objet que nous avons créée:
TypeName: System.Management.ManagementClass#ROOT MicrosoftDNS MicrosoftDNS_ResourceRecord
Vous pouvez également déterminer les méthodes disponibles pour cette classe:
CreateInstanceFromTextRepresentationGetObjectByTextRepresentation
Vous pouvez utiliser CreateInstanceFromTextRepresentation, qui doit être l'un des noms de méthode les plus longs que j'ai rencontrés. Ce n'est pas quelque chose que je veux taper régulièrement, et dans des moments comme celui-ci, je suis extrêmement reconnaissant aux inventeurs du copier-coller.
La dernière étape du script consiste à créer les enregistrements DNS:
si ($ arec) $ text = "$ ordinateur DANS UNE adresse $" $ rec.CreateInstanceFromTextRepresentation ($ serveur, $ fzone, $ text)
Testez maintenant pour voir si le commutateur pour ce type d'enregistrement est défini (rappelez-vous que les paramètres du commutateur sont définis par défaut sur false pour que vous puissiez les ignorer si vous n'avez pas besoin de créer un enregistrement d'un type particulier). S'il est défini, vous créez le texte approprié pour l'enregistrement et appelez le CreateInstanceFromTextRepresentation , qui prend trois paramètres:
- Serveur dns
- Zone DNS
- Représentation textuelle de l'enregistrement DNS.
Créons des enregistrements. Il existe un certain nombre de paramètres communs:
- Nom du serveur
- Nom de l'ordinateur (hôte vers lequel pointe le nouvel enregistrement) et son adresse
- Une zone, généralement la zone de recherche directe.
Sommaire
Un enregistrement
Le seul paramètre supplémentaire est le commutateur pour indiquer au script de créer un enregistrement A:
new-dnsrecord -serveur server02 -fzone «Manticore.org» "-ordinateur «Test27.manticore.org» -adresse dix.dix.54.241 -arec
Enregistrement PTR
La zone de recherche inversée doit être fournie ainsi que le –Prt commutateur:
new-dnsrecord -serveur server02 -rzone «54 .10.10.in-addr.arpa» "-ordinateur «Test27.manticore.org» -adresse dix.dix.54.241 -ptr
Enregistrement d'alias
Cela ajoute la -alias et utilise le paramètre –Cname passer plutôt que le –Arec commutateur que nous avons vu avec l'enregistrement A:
new-dnsrecord -serveur server02 -fzone «Manticore.org» -ordinateur «Test27.manticore.org» "-alias «Mydnstest.manticore.org» -cname
Enregistrement MX
Celui-ci est un peu différent en ce que vous ajoutez le domaine de messagerie avec une priorité. La priorité dicte le serveur de messagerie utilisé; la valeur de priorité la plus basse l'emporte. L'exemple est complété à l'aide d'un –Mx commutateur:
new-dnsrecord -serveur server02 -fzone «Manticore.org» -ordinateur «Test27.manticore.org» "-domaine de messagerie «Manticore.org» -priorité dix -mx
Enregistrements multiples
Vous pouvez regrouper plusieurs des exemples précédents pour utiliser cette fonction pour créer un certain nombre d'enregistrements en même temps:
new-dnsrecord -serveur server02 -fzone «Manticore.org» -rzone «54 .10.10.in-addr.arpa» "-ordinateur «Test27.manticore.org» -adresse dix.dix.54.241 -alias «Mydnstest.manticore.org» "-arec -cname -ptr
Cet exemple crée un enregistrement A, un enregistrement PTR et un alias, le tout en un seul passage. Vous devez fournir la zone de recherche inversée, bien que cela puisse être calculé à partir de la adresse si nécessaire, ainsi que l'alias.
La fonction peut être facilement étendue si d'autres types d'enregistrement sont nécessaires. Si votre environnement a une seule zone avant et une seule zone arrière, il serait possible de définir ces valeurs comme valeurs par défaut pour les paramètres pertinents. Cela permettrait d'économiser de la frappe et de rendre le script plus facile à utiliser.
Il est également possible d'utiliser ce script pour la création en masse d'enregistrements DNS. Mettez les données dans un fichier CSV et canalisez le contenu dans pour chaque avec l'appel de fonction dans le pour chaque.
En plus de montrer comment utiliser les classes DNS WMI, ce script a un certain nombre de techniques utiles qui peuvent être utilisées dans d'autres endroits.
De plus amples informations sur l'utilisation de Windows PowerShell pour administrer le DNS peuvent être trouvées dans le chapitre 9 de PowerShell en pratique et dans un enregistrement d'une réunion du groupe d'utilisateurs PowerShell.
RS, c'est tout ce qu'il y a à utiliser Windows PowerShell pour travailler avec DNS. Et merci, Richard, d'avoir écrit un article aussi instructif. La semaine des blogueurs invités se poursuivra demain lorsque nous parlerons de SharePoint avec Josh Gavant en tant qu'invité.
Nous serions ravis que vous nous suiviez sur Twitter et Facebook. Si vous avez des questions, envoyez-nous un e-mail à l'adresse scripteur@microsoft.com ou postez vos questions sur le forum officiel des scripteurs. À demain. Jusque-là, la paix.
Ed Wilson et Craig Liebendorfer, scripteurs
Commentaires
Laisser un commentaire