System.Net.Dns is missing in many ways. I saw some people get to writing full-size DNS parsers to get what they need.
I know this does not fully answer your question, but this function seems to do its job, however it is rather fragile and relies on nslookup, so YMMV:
function get-dnsaliases($ip) { $ip_rev = $ip -split '\.' [array]::reverse($ip_rev) $ip_rev = $ip_rev -join '.' $ptr_regex = "^`t" + [regex]::escape("$ip_rev.in-addr.arpa, type = PTR, class = IN") $responses = nslookup -d $ip $foundanswer = $null $aliases = @() foreach ($response in $responses) { if($foundanswer) { if($response -match "^`tname = (?<alias>.+)$") { $aliases += $Matches.alias } } elseif($response -match $ptr_regex) { $foundanswer = $true } } return $aliases }
source share