Wenn Sie Web- oder Mailserver verwalten, wissen Sie, wie stark diese Server auf ordnungsgemäß konfigurierte DNS-Einträge angewiesen sind. Das Fehlen von DNS-Einträgen kann verschiedene Probleme verursachen, einschließlich der Unfähigkeit von Benutzern, Ihre Website zu finden oder der Nichtzustellung von E-Mails. Es ist eine gute Sache, dass das PowerShell Resolve-DnsName-Cmdlet existiert, mit dem das Überwachen von DNS-Einträgen durch Skripting automatisiert werden kann.
Der Tag eines Administrators ist bereits voll genug, und das manuelle Überprüfen, ob DNS-Einträge ordnungsgemäß aufgelöst werden können, bedeutet mehr manuellen Aufwand.
In diesem Artikel erfahren Sie, was und wie Sie das Resolve-DnsName
-Cmdlet verwenden können, um DNS-Einträge mit PowerShell abzufragen. Bis zum Ende dieses Artikels haben Sie auch gelernt, wie Sie ein grundlegendes Skript erstellen können, um einen Bericht über Ihre ausgewählten DNS-Einträge zu erstellen und zu überwachen.
Voraussetzungen
Dieser Artikel ist eine Schritt-für-Schritt-Anleitung, und wenn Sie den Beispielen folgen möchten, benötigen Sie:
- A computer running Windows 10 or above.
- Windows PowerShell 5.1 oder PowerShell 7.0
- A script editor such as Visual Studio Code, Atom, or Notepad++.
Resolve-DnsName: Der PowerShell DNS Resolver
Es gibt mehr als eine Möglichkeit, eine DNS-Abfrage durchzuführen. Das Resolve-DnsName
-Cmdlet ähnelt dem nslookup
-Befehlszeilentool, das mit Windows geliefert wird, oder dem dig
-Befehl, wenn Sie eher ein Linux-Administrator sind.
Einige Websites bieten DNS-Eintrag-Überwachungs- und Berichterstellungsdienste an. Diese Dienste von Drittanbietern sind jedoch meist kostenpflichtig. Es gibt jedoch eine kostenlose Alternative, mit der Sie auch Ihre Skripting-Fähigkeiten demonstrieren können!
Das Cmdlet Resolve-DnsName
löst, wie der Name schon sagt, DNS-Namen in IP-Adressen und umgekehrt auf. Dieses Cmdlet ist Teil des dnsclient-PowerShell-Moduls, das zum Zeitpunkt dieses Schreibens mit Windows 10, Windows Server 2012/R2, Windows Server 2016 und Windows Server 2019 ausgeliefert wird.
Da Resolve-DnsName
ein PowerShell-Cmdlet ist, liefert es seine Ergebnisse als Objekte zurück, die gespeichert, manipuliert und exportiert werden können. Wenn Sie zum Beispiel den DNS-Eintrag von google.com mit dem Befehl Resolve-DnsName google.com
abfragen, erhalten Sie die unten gezeigte Ausgabe.

Das Ergebnis wurde als Objekt zurückgegeben, sodass Sie die Ergebnisse in eine CSV-Datei exportieren oder das Format manipulieren können, um HTML-Berichte zu erstellen.
Das Cmdlet Resolve-DnsName
unterscheidet sich von dem altbewährten Dienstprogramm nslookup
. nslookup
gibt eine einfache Zeichenkette zurück. Ein Beispiel finden Sie im folgenden Screenshot. Wenn Sie Informationen daraus extrahieren müssen, kann dies mühsam sein.

Abfrage verschiedener Arten von DNS-Einträgen
Standardmäßig fragt Resolve-DnsName
die A- und AAAA-Arten von DNS-Einträgen ab. Wenn Sie beispielsweise den DNS-Eintrag für gmail.com
mit dem folgenden Befehl abfragen:
Wie unten zu sehen ist, werden nur die AAAA- und A-Einträge zurückgegeben. Das liegt daran, dass der abzufragende DNS-Eintragstyp nicht angegeben wurde.

Jetzt, da wir alle wissen, dass gmail.com eine E-Mail-Domäne ist, die von Googles E-Mail-Dienst verwendet wird, muss es einen MX-Eintrag dazu geben, oder? Nun, anstatt anzunehmen, können Sie es bestätigen, indem Sie diesen Befehl verwenden:
Die unten gezeigte Ausgabe zeigt die Liste der MX-Einträge für gmail.com.

Um mehr über die verschiedenen Eintragstypen zu erfahren, die mit
Resolve-DnsName
verwendet werden können, besuchen Sie diesen Link und suchen Sie nach der Tabelle für den-Type
-Parameter. Oder Sie können einfach die Resolve-DnsName-Hilfe mit dem Befehlget-help Resolve-DnsName
aufrufen.
Verwendung bestimmter Server für die DNS-Suche
Resolve-DnsName
verwendet standardmäßig die auf Ihrem Computer konfigurierten DNS-Server-Adressen. Sie können jedoch auch Resolve-DnsName
anweisen, einen bestimmten DNS-Server für Abfragen zu verwenden.
Zum Beispiel können Sie Google Public DNS verwenden, um Einträge nachzuschlagen, indem Sie den -Server
-Parameter zu Ihrem Befehl hinzufügen, ähnlich wie im folgenden Beispiel.
Das Ergebnis des obigen Befehls würde dem in der untenstehenden Abbildung ähneln.

An diesem Punkt könnten Sie sich fragen: „Warum sollte ich einen anderen DNS-Server verwenden?“. Das ist eine berechtigte Frage. Wenn Sie versuchen, denselben Eintrag mit dem standardmäßigen DNS-Server Ihres Computers oder einem anderen DNS-Server nachzuschlagen, erhalten Sie wahrscheinlich das gleiche Ergebnis.
Es gibt viele Gründe, unterschiedliche DNS-Server mit Resolve-DnsName
zu verwenden. Einige dieser Gründe könnten sein:
- Geschwindigkeit – Einige DNS-Server können schneller arbeiten als andere.
- Sicherheit – Einige DNS-Server verfügen möglicherweise über mehr Sicherheitsmaßnahmen als andere, die Hijacks und Angriffe verhindern.
- Verfügbarkeit von Datensätzen – In den meisten Szenarien haben Organisationen ihre eigenen internen DNS-Server, die die Zonen und Datensätze für Namen enthalten, die nur intern aufgelöst werden. In diesem Fall wird die Abfrage eines internen Namens über einen öffentlichen DNS-Server fehlschlagen.

- DNS-Server leiten keine Anfragen weiter – Einige Organisationen erlauben keine DNS-Weiterleitung. Die Verwendung von ihnen für die DNS-Abfrage öffentlicher DNS-Datensätze wird fehlschlagen.
- Fehlerbehebung und Tests – Wenn Ihre bevorzugten DNS-Server Probleme bereiten, möchten Sie vielleicht Ihre Abfragen mit einem anderen DNS-Server testen.
DNS-Datensätze mithilfe eines PowerShell-Skripts melden
Nun, da Sie die Grundlagen der Verwendung des Resolve-DnsName
-Cmdlets gelernt haben, erfahren Sie in diesem Abschnitt, wie Sie ein PowerShell-Skript erstellen, um DNS-Datensätze zu überwachen und zu melden. Sie sollten in der Lage sein, das Wissen, das Sie bisher in den vorherigen Abschnitten erworben haben, beim Erstellen dieses Skripts anzuwenden.
Starten Sie Ihren Skript-Editor Ihrer Wahl und erstellen Sie eine neue Datei mit dem Namen GetDnsRecord.ps1.
Definition der Variablen
Zuerst bestimmen Sie die zu verwendenden Variablen. Diese Variablen umfassen Folgendes:
$NameList
– Diese Variable enthält die Namen der DNS-Datensätze, die Ihr Skript abfragen soll$Serverlist
– Verwenden Sie diese Variable, um die DNS-Server anzugeben, die vom Skript für Abfragen verwendet werden.
Kopieren Sie den folgenden Code und fügen Sie ihn am Anfang Ihres Skripts ein.
Durchführung von DNS-Abfragen
Next muss der Code in der Lage sein, den DNS-Eintrag für jeden der angegebenen Namen nachzuschlagen. In diesem Fall wird die foreach-Schleife verwendet, um die Liste der Einträge zu durchlaufen und für jeden Namen mithilfe von Resolve-DnsName
nachzuschlagen.
Die Zeile $FinalResult = @()
erstellt ein leeres Array, in dem das Endergebnis gespeichert wird. Dann übergibt PowerShell mit der foreach-Schleife jedes Element in der Variable $NameList
an eine Variable namens $Name
.
In jeder Iteration erstellt die Zeile $tempObj = "" | Select-Object Name,IPAddress,Status,ErrorMessage
ein temporäres Objekt mit vier Eigenschaften, um das Ergebnis des erfolgreichen DNS-Lookups zu speichern.
Anschließend wird die try{}
-Anweisung verwendet, um den Befehl Resolve-DnsName
auszuführen und die DNS A-Einträge abzurufen und die Werte in $tempObj
zu setzen. Falls der DNS-Lookup fehlschlägt, fängt die catch{}
-Anweisung den Fehler ab, und der Fehler wird im Objekt $tempObj
eingefügt.
Am Ende jeder Iteration wird der Wert des Objekts $tempObj
dem $FinalResult
angehängt. Und sobald das letzte Element im Array $NameList
verarbeitet wurde, wird die Schleife beendet. Dann wird der Wert des $FinalResult
angezeigt.
Kopieren Sie den folgenden Code und fügen Sie ihn am Ende Ihres Skripts ein. Es ist nicht erforderlich, Werte zu ändern.
Nachdem Sie das Skript gespeichert haben, führen Sie es in PowerShell aus, indem Sie es mit seinem Namen aufrufen GetDnsRecord.ps1. Die Demonstration unten zeigt die Ausgabe.

Wie Sie aus dem obigen Ergebnis sehen können, ist die Ausgabe ein Objekt, das nützlich ist, wenn Sie die Ergebnisse beispielsweise als CSV-Datei exportieren möchten, indem Sie den folgenden Befehl verwenden.
Die CSV-Ausgabe würde ähnlich aussehen wie die untenstehende.

Fazit
In diesem Artikel haben Sie die Grundlagen gelernt, wie Sie das Resolve-DnsName
-Cmdlet verwenden können, um DNS-Records-Lookups in PowerShell durchzuführen. Sie haben auch gelernt, wie sich Resolve-DnsName
von anderen Tools wie dem nslookup-Dienstprogramm unterscheidet.
Sie haben gesehen, wie Resolve-DnsName
in einem Skript verwendet werden kann, um die DNS-Record-Suche zu automatisieren. Dies wäre nützlich als Überwachungstool, um sicherzustellen, dass Sie über den aktuellen Status der von Ihnen betreuten DNS-Records informiert sind.
Mit Ihren PowerShell-Skripting-Fähigkeiten kann das Berichtsskript weiter verbessert werden, indem Code hinzugefügt wird, um den Bericht automatisch an bestimmte Empfänger zu senden. Es kann auch so modifiziert werden, dass es einen visuell ansprechenden HTML-Ausgang erstellt.
Letztendlich ist Resolve-DnsName
ein ausgezeichnetes Tool für DNS-Lookups, egal ob Sie es manuell verwenden oder für die Automatisierung in Skripten. Jetzt haben Sie das Wissen darüber, wie es funktioniert, und es liegt an Ihnen, Wege zu finden, es als Teil Ihrer Administrationsaufgaben zu nutzen.
Weiterführende Literatur
- Google Public DNS
- Zurück zu den Grundlagen: Verstehen von PowerShell-Objekten
- Export-Csv: Der PowerShell-Weg, um CSV-Dateien als Bürger erster Klasse zu behandeln
- PowerTip: Verwenden Sie PowerShell, um DNS-Einstellungen zu erhalten
- Erstellen von HTML-Berichten in PowerShell mit ConvertTo-Html
- Wie man einen HTML-Bericht mit PowerShell erstellt