Public/Test-DnsResolution.ps1

#
# Function: Test-DnsResolution
# Public function for the GSA client diagnostics toolkit.
#
function Test-DnsResolution
{
    <#
.SYNOPSIS
    Tests DNS resolution for a list of FQDNs and logs CNAME chains.
.PARAMETER fqdnList
    List of FQDNs to resolve.
#>

    [CmdletBinding()]
    param (
        [string[]]$fqdnList,
        [ValidateSet("ERROR", "WARNING", "INFO", "DEBUG", "SUCCESS")]
        [string]$LogLevel
    )

    if ($PSBoundParameters.ContainsKey('LogLevel'))
    { $script:LogLevel = $LogLevel }

    $allTestsPassed = $true

    foreach ($fqdn in $fqdnList)
    {
        Write-Log "Checking DNS resolution for: $fqdn" "INFO" -Color Cyan

        try
        {
            # Resolve DNS for all record types
            $records = Resolve-DnsName -Name $fqdn -NoHostsFile -ErrorAction Stop

            # Extract A and AAAA records (IP addresses)
            $ipAddresses = $records | Where-Object { $_.QueryType -eq "A" -or $_.QueryType -eq "AAAA" } |
            Select-Object -ExpandProperty IPAddress -Unique

            if ($ipAddresses)
            {
                Write-Log "DNS resolution for $fqdn returned IP addresses: $($ipAddresses -join ', ')" "SUCCESS" -Color Green
            }
            else
            {
                Write-Log "DNS resolution for $fqdn did not return any A/AAAA records." "WARNING" -Color Yellow
            }

            # Retrieve the CNAME chain (if any)
            $cnameChain = Get-DnsChain -fqdn $fqdn
            if ($cnameChain.Count -gt 0)
            {
                Write-Log "CNAME chain for $fqdn ($($cnameChain.Count) hop(s)):" "INFO" -Color Cyan
                Write-Log " $fqdn" "INFO" -Color Cyan
                foreach ($hop in $cnameChain)
                {
                    Write-Log " -> $hop" "INFO" -Color Cyan
                }
            }
            else
            {
                Write-Log "No CNAME records found for $fqdn." "INFO" -Color DarkGray
            }
        }
        catch
        {
            Write-Log "DNS resolution for $fqdn failed: $($_.Exception.Message)" "ERROR" -Color Red
            $allTestsPassed = $false
        }
    }
    return $allTestsPassed
}