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-DnsServerZoneandAdd-DnsServerPrimaryZoneto oversee and create zones. - Add or update DNS records with commands like
Add-DnsServerResourceRecordAorSet-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.