Serveur d'impression

Gérer DNS dans un environnement Windows à l'aide de PowerShell – Bien choisir son serveur d impression

Le 12 juin 2020 - 12 minutes de lecture

Avatar

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! Question Hé, le scripteur! Que puis-je faire avec Windows PowerShell pour gérer mon infrastructure DNS?

– RS

Hé, le scripteur! Réponse

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.

Image des classes DNS du serveur DNS distant s'exécutant sur le contrôleur de domaine Windows Server 2008

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.

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 [email protected] 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

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