# The data we're looking for (MUST INCLUDE asterisks). Can use hostnames, domain names, IP addresses.
$findme = "*dc04*"
# Create an empty results array
$results = @();
# Get all primary forward lookup DNS zones
$zones = get-dnsserverzone | where {($_.zonetype -eq "primary") -and ($_.isreverselookupzone -eq $false)};
# Loop through each zone found
foreach ($zone in $zones) {
# Get DNS records that match
$records = get-dnsserverresourcerecord $zone.zonename | where {($_.recorddata.ipv4address.ipaddresstostring -like $findme) -or ($_.recorddata.HostNameAlias -like $findme) -or ($_.hostname -like $findme) -or ($_.recorddata.nameserver -like $findme) -or ($_.recorddata.mailexchange -like $findme) -or ($_.recorddata.domainname -like $findme)}
# Loop through each record found
foreach ($record in $records) {
# Define the data, given the different record types
switch ($record.recordtype) {
"A" {$data = $record.recorddata.ipv4address.ipaddresstostring}
"NS" {$data = $record.recorddata.nameserver}
"MX" {$data = $record.recroddata.mailexchange}
"CNAME" {$data = $record.recorddata.hostnamealias}
"SRV" {$data = $record.recorddata.domainname;}
}
# Add row of data to results array
$row = "" | select zonename, recordtype, hostname, data;
$row.zonename = $zone.zonename
$row.recordtype = $record.recordtype
$row.hostname = $record.hostname
$row.data = $data;
$results = $results + $row;
}
}
# Display results
$results | sort zonename, recordtype, hostname, data | out-gridview;
Excellent script. Wish I had found this last week when I was trying to create my own report.