Comment créer et gérer des zones et des enregistrements DNS à l’aide de PowerShell

Gérer les zones et les enregistrements DNS sous Windows peut parfois s’avérer fastidieux, surtout pour les opérations en masse ou l’automatisation. L’ Dnscmdoutil en ligne de commande classique fonctionne, mais il est quelque peu obsolète et peu intuitif. Pour les configurations plus modernes, le module DNSServer de PowerShell est une solution idéale, une fois installé. Si vous manipulez régulièrement des enregistrements ou des zones DNS, savoir le faire via PowerShell vous fera gagner un temps précieux et simplifiera la création de scripts et l’automatisation. Que vous gériez quelques zones ou effectuiez des modifications d’enregistrements en masse à partir de fichiers CSV, ce guide vous fournit les bases nécessaires pour démarrer. Vous y trouverez des commandes permettant de créer, modifier et supprimer des enregistrements ou des zones sur votre serveur DNS ; leur utilisation est assez simple une fois maîtrisée.

Comment résoudre les problèmes de gestion DNS avec PowerShell sous Windows

Module PowerShell DNSServer

Tout d’abord, vous avez besoin du module DNSServer, qui fait partie des outils d’administration de serveur distant (RSAT).Sous Windows 10, vous devrez probablement installer RSAT séparément : accédez à Paramètres > Applications > Fonctionnalités facultatives > Ajouter une fonctionnalité et recherchez RSAT : Outils de serveur DNS. Sous Windows Server, c’est plus simple : vous pouvez l’activer via Gestionnaire de serveur > Gérer > Ajouter des rôles et des fonctionnalités. Si vous n’êtes pas sûr que le module soit installé, exécutez la commande suivante :

Get-Module DNSServer –ListAvailable

Si cette commande affiche des résultats, c’est bon. Sinon, vous devrez installer RSAT ou activer les outils du serveur DNS. Pour voir les commandes disponibles, essayez :

Get-Module DNSServer

Cette commande affiche toutes les cmdlets, ce qui vous permet de voir les options de personnalisation. Un problème fréquent survient lorsque PowerShell ne reconnaît pas le module, généralement parce qu’il n’est pas installé ou importé dans votre session. Pour l’importer manuellement, exécutez la commande appropriée Import-Module DNSServer. Sur les versions récentes de Windows, il devrait se charger automatiquement s’il est installé.

Gérer les zones DNS avec PowerShell

Supposons que vous ayez besoin de consulter ou de créer des zones. Vous pouvez commencer par vérifier les zones existantes sur votre serveur DNS en exécutant la commande suivante :

Get-DnsServerZone –ComputerName dc01

Remplacez dc01 par le nom d’hôte ou l’adresse IP de votre serveur DNS. Si vous obtenez un résultat vide ou une erreur, il y a un problème avec votre connexion ou vos autorisations. Pour ajouter une nouvelle zone principale appelée woshub.com dans Active Directory, exécutez :

Add-DnsServerPrimaryZone -Name woshub.com -ReplicationScope "Forest" –PassThru

Cela devrait créer une zone intégrée, donc liée à votre Active Directory. Si vous souhaitez une zone de recherche inversée (idéale pour les enregistrements PTR), exécutez :

Add-DnsServerPrimaryZone -NetworkId "192.168.100.0/24" -ReplicationScope Domain

Ceci est utile lors de la configuration des mappages DNS inverses. De plus, si vous ajoutez de nouvelles zones, n’oubliez pas de les synchroniser avec les autres serveurs DNS de votre environnement, notamment si vous disposez de plusieurs contrôleurs de domaine. Vous pouvez le faire avec :

Sync-DnsServerZone –passthru

Il est normal que votre zone n’affiche aucun enregistrement pour le moment. Pour consulter son contenu, exécutez simplement la commande suivante :

Get-DnsServerResourceRecord -ComputerName dc01 -ZoneName contoso.local

Si pour une raison quelconque vous souhaitez supprimer une zone, c’est tout aussi simple :

Remove-DnsServerZone -Name woshub.com -ComputerName dc01

Cette opération efface la zone et supprime également ses enregistrements ; soyez donc prudent. Vérifiez toujours deux fois avant de l’exécuter.

Gérer les enregistrements DNS comme un pro

Ajouter de nouveaux enregistrements DNS est assez simple. Pour créer un enregistrement A pour un nom d’hôte, la commande ressemble à ceci :

Add-DnsServerResourceRecordA -Name ber-rds1 -IPv4Address 192.168.100.33 -ZoneName woshub.com -TimeToLive 01:00:00

Et si vous souhaitez également l’enregistrement PTR (pour le DNS inverse), ajoutez simplement –CreatePtr à cette commande, ou effectuez-le séparément :

Add-DNSServerResourceRecordPTR -ZoneName 100.168.192.in-addr.arpa -Name 33 -PTRDomainName ber-rds1.woshub.com

Il en va de même pour les CNAME, qui sont en fait des alias pour les enregistrements A. Pour en configurer un, exécutez :

Add-DnsServerResourceRecordCName -ZoneName woshub.com -Name Ber-RDSFarm -HostNameAlias ber-rds1.woshub.com

Si vous devez mettre à jour l’adresse IP d’un enregistrement existant, la procédure est un peu plus longue. Il faut récupérer l’enregistrement actuel, modifier la propriété, puis la remplacer.

$OldDNS = get-DnsServerResourceRecord -Name ber-rds1 -ZoneName woshub.com -ComputerName dc01
$NewDNS = $OldDNS | Select-Object -Property * -ExcludeProperty RecordData

$NewDNS. RecordData. IPv4Address = [System. Net. IPAddress]::parse('192.168.100.133')
Set-DnsServerResourceRecord -NewInputObject $NewDNS -OldInputObject $OldDNS -ZoneName woshub.com -ComputerName dc01

And make sure it’s updated:

Get-DnsServerResourceRecord -Name ber-rds1 -ZoneName woshub.com

Want to list all CNAME records to troubleshoot? Just add -RRType CNAME:

Get-DnsServerResourceRecord -ComputerName DC01 -ZoneName woshub.com -RRType CNAME

Or filter records with specific names or patterns using:

Get-DnsServerResourceRecord -ZoneName woshub.com -RRType A | Where-Object HostName -like "*rds*"

Removing records? Easier than you think. For example, delete a CNAME with:

Remove-DnsServerResourceRecord -ZoneName woshub.local -RRType CName -Name Ber-RDSFarm

Or an A record:

Remove-DnsServerResourceRecord -ZoneName woshub.local -RRType A -Name ber-rds1 –Force

Same goes for PTR records in reverse zones.

Bulk Creating Records from CSV Files

Now, here’s the thing — doing records one by one sucks. Instead, if you have a CSV with all your hostnames and IPs, automate the whole process. Create a text file, say NewDnsRecords.txt, with this format:

HostName, IPAddress host1, 192.168.100.10 host2, 192.168.100.11 

And run this PowerShell snippet:

Import-Csv "C:\PS\NewDnsRecords.txt" | %{ Add-DnsServerResourceRecordA -ZoneName woshub.com -Name $_."HostName" -IPv4Address $_."IPAddress" }

If you want PTR records for reverse DNS, add –CreatePtr and modify the script accordingly, or process a file with the hostname, octet, and zone info. For example, a CSV like:

octet, hostName, zoneName 102, ber-rds2.woshub.com, 100.168.192.in-addr.arpa 103, ber-rds3.woshub.com, 100.168.192.in-addr.arpa 

And run a similar import script:

Import-Csv "C:\PS\NewDnsPTRRecords.txt" | %{ Add-DNSServerResourceRecordPTR -ZoneName $_."zoneName" -Name $_."octet" -PTRDomainName $_."hostName" }

Always double-check your DNS through the DNS Manager console (dnsmgmt.msc) after bulk changes — nothing worse than missing records or typos.

Wrap-up

Handling DNS with PowerShell isn’t rocket science, but it’s easy to get overwhelmed when you’re doing it manually or in big batches. These commands are a good starting point, and once you get why they work, automating DNS tasks becomes way less stressful. Just keep testing in a lab environment if possible, and remember — always backup your DNS zones before making major changes, in case something goes sideways. Overall, scripting DNS management with PowerShell can seriously streamline your workflow, especially if you manage lots of zones or records regularly.

Summary

  • Make sure the DNSServer module is installed and imported.
  • Use Get-DnsServerZone and Add-DnsServerPrimaryZone to oversee and create zones.
  • Add or update DNS records with commands like Add-DnsServerResourceRecordA or Set-DnsServerResourceRecord.
  • Bulk operations? Just import from CSV and run the script.
  • Always verify your changes in DNS Manager or with Get-DnsServerResourceRecord.

Fingers crossed this helps speed up your DNS workflows — because Windows DNS can be a real stubborn beast sometimes, but PowerShell makes it a lot more manageable.