Als je web- of mailservers beheert, weet je hoezeer deze servers afhankelijk zijn van adequaat geconfigureerde DNS-records. Ontbrekende DNS-records kunnen allerlei problemen veroorzaken, waaronder gebruikers die je website niet kunnen vinden of het niet afleveren van e-mails. Het is een goed ding dat het PowerShell Resolve-DnsName cmdlet bestaat, en hiermee kan het controleren van DNS-records worden geautomatiseerd via scripting.
De dag van een beheerder is al druk genoeg, en handmatig controleren of DNS-records correct kunnen worden opgelost betekent meer handmatige inspanning.
In dit artikel leer je wat en hoe je het Resolve-DnsName
cmdlet moet gebruiken om DNS-records te bevragen met PowerShell. Tegen het einde van dit artikel heb je ook geleerd hoe je een basis script kunt maken om een rapport te maken van de door jou aangewezen DNS-records om te monitoren.
Vereisten
Dit artikel is een stapsgewijze handleiding, en als je van plan bent om de voorbeelden te volgen, heb je nodig:
- A computer running Windows 10 or above.
- Windows PowerShell 5.1 of PowerShell 7.0
- A script editor such as Visual Studio Code, Atom, or Notepad++.
Resolve-DnsName: De PowerShell DNS-oplosser
Er zijn meer dan één manier om een DNS-query uit te voeren. Het Resolve-DnsName
cmdlet is vergelijkbaar met de nslookup
command-line tool die bij Windows wordt geleverd, of de dig
commando als je meer een Linux-beheerder bent.
Sommige websites bieden DNS-record-monitoring-/rapportageservices aan. Maar deze diensten van derden gaan meestal gepaard met kosten, natuurlijk. Er is echter een gratis alternatief, waarmee je ook je scriptingsvaardigheden kunt laten zien!
De Resolve-DnsName
-cmdlet, zoals de naam al aangeeft, lost DNS-namen op naar IP-adressen en vice versa. Deze cmdlet maakt deel uit van de dnsclient-PowerShell-module die, op het moment van schrijven, wordt meegeleverd met Windows 10, Windows Server 2012/R2, Windows Server 2016 en Windows Server 2019.
Omdat Resolve-DnsName
een PowerShell-cmdlet is, geeft het de resultaten terug als objecten die kunnen worden opgeslagen, gemanipuleerd en geëxporteerd. Bijvoorbeeld, het opzoeken van het DNS-record van google.com met het commando Resolve-DnsName google.com
geeft je de hieronder getoonde output.

Het resultaat werd geretourneerd als een object dat je in staat stelt om de resultaten naar een CSV-bestand te exporteren, of de opmaak te manipuleren om HTML-rapporten te genereren.
De Resolve-DnsName
-cmdlet verschilt van het ouderwetse nslookup
-hulpprogramma. nslookup
geeft een eenvoudige string terug. Je kunt een voorbeeld zien in de onderstaande screenshot. Als je informatie uit deze gegevens moet halen, wordt het een uitdaging.

Querying Different Types of DNS Records
Standaard vraagt Resolve-DnsName
de A- en AAAA-types van DNS-records op. Als voorbeeld, als je het DNS-record voor gmail.com
opzoekt met de onderstaande opdracht:
Zoals je hieronder kunt zien, worden alleen de AAAA- en A-records weergegeven. Dat komt doordat het type DNS-record dat moet worden opgezocht niet is gespecificeerd.

Nu, aangezien we allemaal weten dat gmail.com een e-maildomein is dat wordt gebruikt door de e-mailservice van Google, moet er toch een MX-record aan gekoppeld zijn, toch? Nou, er is geen noodzaak om aan te nemen wanneer je het kunt bevestigen met deze opdracht:
De output zoals weergegeven in de onderstaande schermafbeelding toont de lijst met MX-records voor gmail.com.

Om meer te weten te komen over de verschillende recordtypes die kunnen worden gebruikt met
Resolve-DnsName
, bezoek deze link en zoek naar de tabel voor de-Type
-parameter. Of raadpleeg de Resolve-DnsName-help gewoon met de opdrachtget-help Resolve-DnsName
.
Specifieke Servers Gebruiken voor DNS-opzoeking
Resolve-DnsName
gebruikt standaard de DNS-serveradressen die zijn geconfigureerd op uw computer. Maar u kunt ook Resolve-DnsName
laten gebruikmaken van een specifieke DNS-server bij het uitvoeren van zoekopdrachten.
Bijvoorbeeld, als u Google Public DNS wilt gebruiken om records op te zoeken, kunt u dat doen door de -Server
-parameter toe te voegen aan uw opdracht, vergelijkbaar met het onderstaande voorbeeld.
Het resultaat van de bovenstaande opdracht zou vergelijkbaar zijn met wat wordt weergegeven in de onderstaande schermafbeelding.

Op dit punt vraagt u zich misschien af: “waarom zou ik een andere DNS-server moeten gebruiken?”. Dat is een geldige vraag. Als u probeert dezelfde record op te zoeken met de standaard DNS-server van uw machine, of een andere DNS-server, krijgt u waarschijnlijk hetzelfde resultaat.
Er kunnen verschillende redenen zijn om verschillende DNS-servers te gebruiken met Resolve-DnsName
. Enkele van deze redenen kunnen zijn:
- Snelheid – Sommige DNS-servers kunnen sneller presteren dan andere.
- Veiligheid – Sommige DNS-servers kunnen meer beveiligingsmaatregelen hebben dan andere die kapingen en aanvallen voorkomen.
- Beschikbaarheid van records – In de meeste scenario’s hebben organisaties hun eigen interne DNS-servers die de zones en records bevatten voor namen die alleen intern worden opgelost. In dit geval zal het opzoeken van een interne naam met behulp van een openbare DNS-server mislukken.

- DNS-servers sturen geen verzoeken door – Sommige organisaties staan geen DNS-doorsturing toe. Het gebruik ervan voor het opzoeken van openbare DNS-records zal mislukken.
- Probleemoplossing en testen – Als je favoriete DNS-servers problemen vertonen, wil je mogelijk je opzoekingen testen met behulp van een andere DNS-server.
Rapportage van DNS-records met PowerShell-script
Nu je de basisprincipes hebt geleerd van het gebruik van de Resolve-DnsName
-cmdlet, leer je in dit gedeelte een PowerShell-script te maken om DNS-records te monitoren en rapporteren. Je zou in staat moeten zijn om de kennis die je tot nu toe hebt opgedaan in de vorige secties toe te passen bij het bouwen van dit script.
Start je scripteditor naar keuze en maak een nieuw bestand met de naam GetDnsRecord.ps1.
Definieer de variabelen
Bepaal eerst de variabelen die je wilt gebruiken. Deze variabelen zullen het volgende bevatten:
$NameList
– Deze variabele bevat de namen van de DNS-records die je script moet opvragen$Serverlist
– Gebruik deze variabele om de DNS-servers aan te geven die door het script zullen worden gebruikt voor opzoekingen.
Kopieer de onderstaande code en plak deze aan het begin van je script.
Uitvoeren van DNS-opzoekingen
Volgende, de code moet in staat zijn om de DNS-record van elk van de opgegeven namen op te zoeken. In dit geval zal de foreach-lus worden gebruikt om de lijst met records te doorlopen en voor elke naam op te zoeken met behulp van Resolve-DnsName
.
De regel $FinalResult = @()
maakt een lege array aan waar het uiteindelijke resultaat zal worden opgeslagen. Vervolgens, met behulp van de foreach-lus, doorloopt PowerShell elk item in de variabele $NameList
naar een variabele genaamd $Name
.
In elke iteratie wordt de regel $tempObj = "" | Select-Object Name,IPAddress,Status,ErrorMessage
gebruikt om een tijdelijk object met vier eigenschappen aan te maken om het resultaat van het volgende DNS-opzoekingsresultaat vast te houden.
Vervolgens wordt de try{}
-verklaring gebruikt om het Resolve-DnsName
-commando uit te voeren om DNS-A-records op te zoeken en de waarden van $tempObj
in te vullen. Als het DNS-opzoekingsresultaat mislukt, vangt de catch{}
-verklaring de fout op en wordt de fout opgenomen in het object $tempObj
.
Aan het einde van elke iteratie wordt de waarde van het object $tempObj
toegevoegd aan de $FinalResult
. En zodra het laatste item in de array $NameList
is verwerkt, zal de lus stoppen. Vervolgens wordt de waarde van $FinalResult
weergegeven.
Kopieer de onderstaande code en plak deze aan het einde van uw script. Er is geen noodzaak om waarden te wijzigen.
Nadat het script is opgeslagen, voer het uit in PowerShell door de naam GetDnsRecord.ps1 te bellen. De demonstratie hieronder toont de uitvoer.

Zoals je kunt zien aan het bovenstaande resultaat, is de uitvoer een object dat handig is als je de resultaten wilt exporteren naar een bestand zoals CSV met behulp van de onderstaande opdracht.
De CSV-uitvoer zou er vergelijkbaar uitzien als hieronder.

Conclusie
In dit artikel heb je de basisprincipes geleerd van hoe je de cmdlet Resolve-DnsName
kunt gebruiken om DNS-records op te zoeken in PowerShell. Je hebt ook geleerd hoe Resolve-DnsName
verschilt van andere tools zoals het nslookup-hulpprogramma.
Je hebt gezien hoe Resolve-DnsName
kan worden gebruikt in een script om de DNS-recordopzoeking te automatiseren. Dit zou handig zijn als een monitoringstool om ervoor te zorgen dat je op de hoogte bent van de huidige status van de DNS-records die je beheert.
Met je PowerShell-scriptingvaardigheden kan het rapportagescript verder worden verbeterd door code toe te voegen om automatisch het rapport per e-mail te verzenden naar opgegeven ontvangers. Het kan ook worden aangepast om een visueel aantrekkelijke HTML-uitvoer te genereren.
Uiteindelijk is Resolve-DnsName
een uitstekende tool voor DNS-opzoekingen, of je het nu handmatig gebruikt of voor automatisering in scripts. Nu heb je kennis over hoe het werkt, en het is aan jou om manieren te vinden om het te gebruiken als onderdeel van je beheertaken.
Verder lezen
- Google Public DNS
- Terug naar de basis: Het begrijpen van PowerShell-objecten
- Export-Csv: De PowerShell-manier om CSV-bestanden te behandelen als eersteklasburgers
- PowerTip: Gebruik PowerShell om DNS-instellingen te krijgen
- HTML-rapporten bouwen in PowerShell met ConvertTo-Html
- Hoe maak je een HTML-rapport met PowerShell