Resolve-DnsName, Get-DnsClientCache: DNS-Fehlersuche mit PowerShell

    Gibt es Probleme bei der Namensauflösung, dann beginnt das Troubleshooting meistens mit ein paar Standardprüfungen der Konfiguration. Sie testen beispielsweise, wie der lokale Rechner oder ein DNS-Server einen bestimmten Namen auflösen oder ob eine fehlerhafte bzw. veraltete HOSTS-Datei vorliegt. PowerShell kann diese Fehlersuche unterstützen.

    Zu den vielen neuen Cmdlets in Windows 8 und Server 2012 zählt eine ganze Sammlung für den Zugriff auf den DNS-Client. Einige davon eignen sich zur Diagnose von DNS-bedingten Verbindungs­problemen, wobei sie in der Lage sind, Tools wie nslookup oder ipconfig zu ersetzen.

    DNS-Server eines Netzwerk-Interfaces anzeigen

    Ein erster Schritt besteht häufig darin, dass man bei falscher oder gar nicht funktionierender Namensauflösung nachsieht, welcher DNS-Server für ein bestimmtes Interface eingetragen ist. Dies kann man mit

    Get-DnsClientServerAddress

    tun. Wenn man nur an solchen für IPv4-Adressen interessiert ist, dann gibt man noch den Parameter -AddressFamily ipv4 an. Soll die Zuweisung der IP-Konfiguration manuell erfolgen, dann kann man den zuständigen DNS-Server mit Hilfe von Set-DnsClientServerAddress ändern. Dazu entnimmt man der Ausgabe von Get-DnsClientServerAddress den Index des Netzwerkadapters und gibt etwa folgenden Befehl ein:

    Set-DnsClientServerAddress -InterfaceIndex 9 -ServerAddresses ("8.8.8.8","208.67.222.222")

    Prüfung von Cache, DNS-Server und HOSTS

    Sind für einen Adapter die korrekten DNS-Server eingestellt, dann kann man bei weiter bestehenden Problemen prüfen, aus welcher Quelle die falsche IP-Adresse geliefert wird. Diese Aufgabe übernimmt Resolve-DnsName.

    Es kann mit Hilfe verschiedener Parameter gezielt die Einträge im DNS-Cache oder im DNS-Server abfragen. Zuständig sind dafür die Parameter -CacheOnly und -DnsOnly:

    Resolve-DnsName -DnsOnly www.windowspro.de

    Will man einen Namen von einem bestimmten DNS-Server auflösen lassen, dann gibt man diesen über den Parameter -Server an.

    Verwendet man die Option -CacheOnly und es stellt sich heraus, dass der Cache veraltete bzw. falsche Einträge enthält, dann kann man ihmn mit dem Aufruf von

    Clear-DNSClientCache

    löschen.

    Möchte man die Einträge in der HOSTS-Datei ignorieren, dann nutzt man zusätzlich den Schalter -NoHostsFile. Bewirkt dieser eine korrekte Namensauflösung, dann liegt offenbar für den betreffenden Namen ein falscher HOSTS-Eintrag vor.

    Cache auslesen

    Hilfreich für die Fehlersuche kann ein Blick in den lokalen DNS-Cache sein. Diesen erlaubt das Cmdlet Get-DnsClientCache. Möchte man zum Beispiel alle Einträge aus der Domäne facebook.com anzeigen, dann könnte man dies mit

    Get-DnsClientCache | where{$_.name -like "*facebook.com"}

    tun.

    Keine Kommentare