Dargslan.DnsResolver.psm1

<#
.SYNOPSIS
    Test DNS resolution, measure query times, and validate DNSSEC

.DESCRIPTION
    Part of the Dargslan Windows Admin Tools collection.
    More tools and resources at https://dargslan.com
    Free Cheat Sheets: https://dargslan.com/cheat-sheets
    Linux & DevOps Books: https://dargslan.com/books

.LINK
    https://dargslan.com

.LINK
    https://github.com/Dargslan/powershell-admin-scripts
#>


function Test-DnsResolution {
    [CmdletBinding()]
    param([string[]]$Domains = @("dargslan.com","google.com","github.com"), [string[]]$Servers = @("8.8.8.8","1.1.1.1"), [switch]$Json)
    $banner = @"
╔══════════════════════════════════════════════════════════╗
║ Dargslan DNS Resolver Tester ║
║ More tools: https://dargslan.com ║
╚══════════════════════════════════════════════════════════╝
"@

    Write-Host $banner -ForegroundColor Cyan
    $results = @()
    foreach ($domain in $Domains) {
        foreach ($server in $Servers) {
            $sw = [System.Diagnostics.Stopwatch]::StartNew()
            try {
                $resolved = Resolve-DnsName -Name $domain -Server $server -Type A -DnsOnly -ErrorAction Stop
                $sw.Stop()
                $results += [PSCustomObject]@{ Domain = $domain; Server = $server; IP = ($resolved | Where-Object Type -eq 'A' | Select-Object -First 1).IPAddress; TimeMs = $sw.ElapsedMilliseconds; Status = "OK" }
            } catch { $sw.Stop(); $results += [PSCustomObject]@{ Domain = $domain; Server = $server; IP = "N/A"; TimeMs = $sw.ElapsedMilliseconds; Status = "FAILED" } }
        }
    }
    if ($Json) { $results | ConvertTo-Json } else { $results | Format-Table -AutoSize }
}

Export-ModuleMember -Function *