Résoudre-DnsName: Recherche d’enregistrement DNS principal dans PowerShell

Si vous gérez des serveurs web ou de messagerie, vous savez à quel point ces serveurs dépendent de la configuration adéquate des enregistrements DNS. Des enregistrements DNS manquants peuvent causer toutes sortes de problèmes, y compris l’incapacité des utilisateurs à trouver votre site web ou la non-distribution des e-mails. C’est une bonne chose que la commande Resolve-DnsName de PowerShell existe, car elle permet d’automatiser la surveillance des enregistrements DNS via des scripts.

Une journée d’administration est déjà assez chargée, et vérifier manuellement si les enregistrements DNS peuvent être résolus correctement signifie plus d’efforts manuels.

Dans cet article, vous apprendrez quoi et comment utiliser la commande Resolve-DnsName pour interroger les enregistrements DNS avec PowerShell. À la fin de cet article, vous aurez également appris comment créer un script de base pour faire un rapport de vos enregistrements DNS nominés à surveiller.

Prérequis

Cet article est un guide pratique, et si vous prévoyez de suivre les exemples, vous aurez besoin de :

Resolve-DnsName : Le résolveur DNS PowerShell

Il existe plus d’une façon d’effectuer une requête DNS. La commande Resolve-DnsName est similaire à l’outil en ligne de commande nslookup qui est livré avec Windows, ou à la commande dig si vous êtes plutôt un administrateur Linux.

Certains sites web proposent des services de surveillance/rapport de enregistrement DNS. Mais ces services tiers sont généralement payants, bien sûr. Il existe une alternative gratuite, qui vous permet également de mettre en valeur vos compétences en script !

La cmdlet Resolve-DnsName, comme son nom l’indique, résout les noms DNS en adresses IP et vice versa. Cette cmdlet fait partie du module PowerShell dnsclient qui, au moment de la rédaction de cet article, est inclus dans Windows 10, Windows Server 2012/R2, Windows Server 2016 et Windows Server 2019.

Étant donné que Resolve-DnsName est une cmdlet PowerShell, elle renvoie ses résultats sous forme d’objets pouvant être stockés, manipulés et exportés. Par exemple, en recherchant l’enregistrement DNS de google.com à l’aide de la commande Resolve-DnsName google.com, vous obtenez la sortie suivante.

DNS Record lookup result using Resolve-DnsName

Le résultat est renvoyé sous forme d’un objet qui vous permet de exporter les résultats vers un fichier CSV ou de manipuler le format pour produire des rapports HTML.

La cmdlet Resolve-DnsName est différente de l’ancienne utilitaire nslookup. nslookup renvoie une simple chaîne de caractères. Vous pouvez voir un exemple dans la capture d’écran suivante. Si vous devez extraire l’une de ces informations, cela va être difficile.

DNS record lookup result using nslookup

Interrogation des différents types d’enregistrements DNS

Par défaut, Resolve-DnsName interroge les types d’enregistrements DNS A et AAAA. Par exemple, si vous recherchez l’enregistrement DNS pourgmail.com en utilisant la commande ci-dessous:

Resolve-DnsName -Name gmail.com

Comme vous pouvez le voir ci-dessous, seuls les enregistrements AAAA et A sont renvoyés. C’est parce que le type d’enregistrement DNS à rechercher n’a pas été spécifié.

DNS record for gmail.com

Maintenant, étant donné que nous savons tous quegmail.com est un domaine de messagerie utilisé par le service de messagerie de Google, il doit y avoir un enregistrement MX associé, n’est-ce pas? Eh bien, pas besoin de supposer quand vous pouvez confirmer en utilisant cette commande:

Resolve-DnsName -Name gmail.com -Type MX

La sortie affichée dans la capture d’écran ci-dessous montre la liste des enregistrements MX pourgmail.com.

MX Record list of gmail.com

Pour en savoir plus sur les différents types d’enregistrements pouvant être utilisés avecResolve-DnsName, visitez celien et recherchez le tableau du paramètre-Type. Ou vous pouvez simplement consulter l’aide de Resolve-DnsName en utilisant la commandeget-help Resolve-DnsName.

Utilisation de serveurs spécifiques pour la recherche DNS

Résoudre-DnsName utilise par défaut les adresses du serveur DNS configurées sur votre ordinateur (DNS server addresses configured on your computer). Cependant, vous pouvez également faire en sorte que Résoudre-DnsName utilise un serveur DNS spécifique lors de la recherche.

Par exemple, si vous souhaitez utiliser Google Public DNS pour rechercher des enregistrements, vous pouvez le faire en ajoutant le paramètre -Serveur dans votre commande, de manière similaire à l’exemple ci-dessous.

# Adresses IP du serveur DNS public Google
$dnsServer = @('8.8.8.8','8.8.4.4')
Resolve-DnsName adamtheautomator.com -Server $dnsServer

Le résultat de la commande ci-dessus serait similaire à celui illustré dans la capture d’écran ci-dessous.

DNS record lookup results using a specific DNS servers

À ce stade, vous pourriez vous demander : « pourquoi aurais-je besoin d’utiliser un serveur DNS différent ? ». C’est une question valide. Si vous essayez de rechercher le même enregistrement en utilisant le serveur DNS par défaut de votre machine, ou un autre serveur DNS, vous obtiendrez probablement le même résultat.

Il peut y avoir de nombreuses raisons d’utiliser des serveurs DNS différents avec Résoudre-DnsName. Certaines de ces raisons peuvent inclure :

  • Vitesse – Certains serveurs DNS peuvent être plus rapides que d’autres.
  • Sécurité – Certains serveurs DNS peuvent avoir plus de mesures de sécurité que d’autres pour prévenir les détournements et les attaques.
  • Disponibilité des enregistrements – Dans la plupart des scénarios, les organisations ont leurs propres serveurs DNS internes qui contiennent les zones et les enregistrements pour les noms qui ne sont résolus qu’en interne. Dans ce cas, la recherche d’un nom interne à l’aide d’un serveur DNS public échouera.
DNS record lookup failure
  • Les serveurs DNS ne transfèrent pas les demandes – Certaines organisations n’autorisent pas le transfert DNS. Les utiliser pour la recherche DNS d’enregistrements DNS publics échouera.
  • Dépannage et test – Lorsque vos serveurs DNS préférés ne fonctionnent pas correctement, vous voudrez peut-être tester vos recherches en utilisant un autre serveur DNS.

Rapport des enregistrements DNS à l’aide d’un script PowerShell

Maintenant que vous avez appris les bases de l’utilisation de la commande Resolve-DnsName, dans cette section, vous apprendrez à créer un script PowerShell pour surveiller et rapporter les enregistrements DNS. Vous devriez être en mesure d’appliquer les connaissances que vous avez acquises dans les sections précédentes jusqu’à présent pour construire ce script.

Démarrez votre éditeur de script préféré et créez un nouveau fichier nommé GetDnsRecord.ps1.

Définition des variables

D’abord, déterminez les variables à utiliser. Ces variables incluront ce qui suit:

  • $NameList – Cette variable contiendra les noms des enregistrements DNS que vous souhaitez que votre script interroge
  • $Serverlist – Utilisez cette variable pour indiquer les serveurs DNS qui seront utilisés par le script pour les recherches.

Copiez le code ci-dessous et collez-le au début de votre script.

$NameList = @('adamtheautomator.com','powershell.org','xyz.local')
$ServerList = @('8.8.8.8','8.8.4.4')

Réalisation de recherches DNS

Ensuite, le code doit être capable de rechercher l’enregistrement DNS de chacun des noms spécifiés. Dans ce cas, la boucle foreach sera utilisée pour itérer sur la liste des enregistrements et rechercher chaque nom à l’aide de Resolve-DnsName.

La ligne $FinalResult = @() crée un tableau vide où le résultat final sera stocké. Ensuite, à l’aide de la boucle foreach, PowerShell passe chaque élément de la variable $NameList à une variable nommée $Name.

À chaque itération, la ligne $tempObj = "" | Select-Object Name,IPAddress,Status,ErrorMessage crée un objet temporaire avec quatre propriétés pour contenir le résultat de la recherche DNS réussie.

Ensuite, l’instruction try{} est utilisée pour exécuter la commande Resolve-DnsName afin de rechercher les enregistrements A du DNS et de remplir les valeurs de $tempObj. En cas d’échec de la recherche DNS, l’instruction catch{} capture l’erreur, et l’erreur sera incluse dans l’objet $tempObj.

À la fin de chaque itération, la valeur de l’objet $tempObj sera ajoutée à $FinalResult. Et une fois que le dernier élément du tableau $NameList est traité, la boucle se terminera. Ensuite, la valeur de $FinalResult sera affichée.

Copiez le code ci-dessous et collez-le à la fin de votre script. Il n’est pas nécessaire de changer les valeurs.

$FinalResult = @()
foreach ($Name in $NameList) {
    $tempObj = "" | Select-Object Name, IPAddress, Status, ErrorMessage
    try {
        $dnsRecord = Resolve-DnsName $Name -Server $ServerList -ErrorAction Stop | Where-Object { $_.Type -eq 'A' }
        $tempObj.Name = $Name
        $tempObj.IPAddress = ($dnsRecord.IPAddress -join ',')
        $tempObj.Status = 'OK'
        $tempObj.ErrorMessage = ''
    }
    catch {
        $tempObj.Name = $Name
        $tempObj.IPAddress = ''
        $tempObj.Status = 'NOT_OK'
        $tempObj.ErrorMessage = $_.Exception.Message
    }
    $FinalResult += $tempObj
}
return $FinalResult

Après avoir enregistré le script, exécutez-le dans PowerShell en appelant son nom GetDnsRecord.ps1. La démonstration ci-dessous montre la sortie.

Script to lookup multiple DNS records using Resolve-DnsName

Comme vous pouvez le voir à partir du résultat ci-dessus, la sortie est un objet qui est utile si vous souhaitez exporter les résultats vers un fichier tel que CSV en utilisant la commande ci-dessous.

.\GetDnsRecord.ps1 | Export-Csv DnsRecord.csv -NoTypeInformation

La sortie CSV ressemblerait à celle ci-dessous.

DNS record lookup report exported to a CSV file

Conclusion

Dans cet article, vous avez appris les bases de l’utilisation de la cmdlet Resolve-DnsName pour effectuer une recherche d’enregistrements DNS dans PowerShell. Vous avez également appris comment Resolve-DnsName est différent d’autres outils tels que l’utilitaire nslookup.

Vous avez vu comment Resolve-DnsName peut être utilisé dans un script pour automatiser la recherche d’enregistrements DNS. Cela serait utile en tant qu’outil de surveillance pour vous assurer que vous êtes au courant de l’état actuel des enregistrements DNS que vous gérez.

En utilisant vos compétences en script PowerShell, le script de rapport peut être amélioré en ajoutant du code pour envoyer automatiquement le rapport par e-mail à des destinataires spécifiés. Il peut également être modifié pour créer une sortie HTML visuellement plaisante.En fin de compte, Resolve-DnsName est un excellent outil pour la recherche DNS, que vous l’utilisiez manuellement ou pour l’automatisation dans les scripts. Maintenant, vous avez les connaissances sur son fonctionnement, et il vous appartient de trouver des moyens de l’utiliser dans le cadre de vos tâches d’administration.

Lecture complémentaire

Source:
https://adamtheautomator.com/resolve-dnsname/