Resolve-DnsName to powershellowy odpowiednik nslookup, tyle że zwraca obiekty .NET zamiast tekstu, który musisz parsować regexem o trzeciej w nocy. Cmdlet odpytuje DNS o podaną nazwę albo adres IP i wyciąga z odpowiedzi konkretne typy rekordów: A, AAAA, MX, TXT, CNAME, NS, SOA czy PTR. Używasz go, gdy chcesz sprawdzić, na jaki adres wskazuje domena, gdzie ląduje poczta albo czy ktoś poprawnie ustawił rekord weryfikacyjny. Bonus: skoro wynik to obiekty, możesz je filtrować przez Where-Object i Select-Object bez bólu.
Składnia i najważniejsze opcje
Resolve-DnsName [-Name]
-Name— nazwa DNS lub adres IP do sprawdzenia (parametr pozycyjny, możesz pominąć słowo-Name).-Type— typ rekordu:A,AAAA,MX,TXT,CNAME,NS,SOA,PTRalboALL. Domyślnie zwraca A i AAAA.-Server— odpytaj konkretny serwer DNS (np.8.8.8.8) zamiast tego z konfiguracji systemu.-DnsOnly— pyta wyłącznie przez DNS, pomija LLMNR i NetBIOS.-NoHostsFile— ignoruje lokalny plik hosts, czyli te ręczne wpisy, o których wszyscy zapominają.-CacheOnly— odpowiada tylko z lokalnego cache resolvera, bez ruszania sieci.-TcpOnly— wymusza zapytanie po TCP zamiast standardowego UDP.-QuickTimeout— skraca czas oczekiwania, gdy serwer milczy.
Przykłady użycia
Resolve-DnsName learningzone.pl— najprostszy lookup, zwraca rekordy A i AAAA domeny.Resolve-DnsName -Name gmail.com -Type MX— pokazuje serwery pocztowe wraz z ich priorytetami.Resolve-DnsName -Name learningzone.pl -Type TXT— wyciąga rekordy TXT, w tym SPF i klucze weryfikacyjne.Resolve-DnsName -Name google.com -Server 1.1.1.1 -DnsOnly— sprawdza, co odpowie Cloudflare, z pominięciem lokalnych mechanizmów.Resolve-DnsName -Name 8.8.8.8 -Type PTR— lookup odwrotny, czyli z adresu IP na nazwę.
Częste błędy i pułapki
Najczęstsza zagwozdka: dostajesz wynik, którego się nie spodziewasz, bo odpowiedź przyszła z lokalnego pliku hosts albo z cache. Jeśli chcesz prawdy prosto z serwera, dorzuć -DnsOnly -NoHostsFile. Pamiętaj też, że -Type domyślnie zwraca tylko A/AAAA — jak nie widzisz rekordu MX czy TXT, to nie znaczy, że go nie ma, tylko że o niego nie zapytałeś.
Druga sprawa: Resolve-DnsName jest częścią modułu DnsClient i istnieje wyłącznie na Windowsie. Na Linuksie czy macOS go nie uświadczysz, tam masz dig albo host. W PowerShell Core na Windowsie działa normalnie. Jeszcze jedno: cmdlet rzuca błąd, gdy nazwa się nie rozwiązuje. Jeśli skryptujesz, opakuj wywołanie w try/catch albo dodaj -ErrorAction SilentlyContinue, bo inaczej pojedynczy zdechły rekord wywróci Ci całą pętlę.
Powiązane komendy: nslookup, dig, host, Test-NetConnection, Get-DnsClientServerAddress, Clear-DnsClientCache.