Auslesen der DNS Informationen für Exchange Migrationen

Ciao Zusammen,

ich bin ja immer wieder fleissig am migrieren von Exchange. Mal nach Exchange Online mal auf einen neuen Exchange on premises. Ein Thema was immer, vor allem bei grossen Kunden, viel Zeit braucht ist das Auslesen der DNS Informationen bei Kunden Domains. Bei ein oder zwei Domänen ist das ja kein Problem. Wenn es aber über 5 werden, kann es schon echt lästig werden. Daher habe ich mich hingesetzt und mir das folgende Skript dafür gebaut.

Ihr braucht natürlich dafür eine import datei, in welcher die Domänen vermerkt sind. In meinem Skript findet Ihr diese unter der Variable $domains ganz am Anfang.

$domains = Get-Content -Path C:\Temp\scripts\domains.txt
#$domains.Count

############Abfrage der MX Records aus dem DNS
Write-host "Start MX Lookup" -ForegroundColor Magenta

$MxEntrys = $domains | resolve-dnsname -Type MX -Server 8.8.8.8 | where {$_.QueryType -eq "MX"} | Select Name, NameExchange, Preference, TTL | Sort Name


if ($domains.Count -gt $MxEntrys.Count) {Write-host "Domain lost!" -ForegroundColor Yellow
                                        Compare-Object $domains $MxEntrys.Name | Where-Object { $_.SideIndicator -eq '<=' } | Foreach-Object { $_.InputObject }
                                        }

write-host "`nFollowing MX Entrys Found:" -ForegroundColor Green
$MxEntrys | Out-Host


############Abfrage der A Records aus dem MX
Write-host "Start A Record from MX Lookup" -ForegroundColor Magenta

$ARecords = $MxEntrys.NameExchange  | resolve-dnsname -Type A -Server 8.8.8.8 | Select Name, IPAddress, TTL | Sort Name

if ($MxEntrys.Count -gt $ARecords.Count) {Write-host "Domain lost!" -ForegroundColor Yellow
                                        Compare-Object $MxEntrys.NameExchange $ARecords.Name | Where-Object { $_.SideIndicator -eq '<=' } | Foreach-Object { $_.InputObject }
                                        }

$ARecords | Out-Host


############Abfrage der TXT Records mit SPF aus dem DNS
Write-host "Start SPF Lookup" -ForegroundColor Magenta

$spfrecords = $domains | resolve-dnsname -Type TXT -Server 8.8.8.8 | where {$_.Strings -like "v=spf*"} | Select Name, Strings, TTL | Sort Name

if ($domains.Count -gt $spfrecords.Count) {Write-host "Domain lost!" -ForegroundColor Yellow
                                           Compare-Object $domains $spfrecords.Name | Where-Object { $_.SideIndicator -eq '<=' } | Foreach-Object { $_.InputObject }
                                          }

write-host "`nFollowing SPF Entrys Found:" -ForegroundColor Green
$spfrecords | Out-Host


############Abfrage der Autodiscover A-Record aus dem DNS
$ErrorActionPreference = "Stop"
Write-host "`nStart Autodiscover A-Record Lookup" -ForegroundColor Magenta
$autoddomains = $domains | foreach {"autodiscover.$_"}
$autodrecords = foreach ($autoddomain in $autoddomains) {
                                                        try {
                                                             resolve-dnsname -name $autoddomain -Type A -Server 8.8.8.8 | Select Name, IP4Address, TTL, QueryType | Sort Name
                                                             }
                                                        catch [System.ComponentModel.Win32Exception] {Write-Host "`nDer DNS-Name $autoddomain ist nicht vorhanden" -ForegroundColor Yellow}
                                                         }

$autodrecords | Out-Host

############Abfrage der Autodiscover SRV-Record aus dem DNS
Write-host "`nStart Autodiscover SRV Lookup" -ForegroundColor Magenta
$autodSRVdomains = $domains | foreach {"_autodiscover._tcp.$_"}
$AutoDSRVRecords = foreach ($autodSRVdomain in $autodSRVdomains) {
                                                        try {
                                                             resolve-dnsname -name $autodSRVdomain -Type SRV -Server 8.8.8.8 | Select Name, IP4Address, TTL, QueryType | Sort Name
                                                             }
                                                        catch [System.ComponentModel.Win32Exception] {Write-Host "`nDer DNS-SRV Eintrag $autodSRVdomain ist nicht vorhanden" -ForegroundColor Yellow}
                                                         }
$AutoDSRVRecords | Out-Host

############Abfrage der Autodiscover CNAME-Record aus dem DNS
Write-host "`nStart Autodiscover CNAME Lookup" -ForegroundColor Magenta
$AutoDCNAMERecords = foreach ($autoddomain in $autoddomains) {
                                                        try {
                                                             resolve-dnsname -name $autoddomain -Type CNAME -Server 8.8.8.8 | Select Name, NameHost, TTL, QueryType | Sort Name
                                                             }
                                                        catch [System.ComponentModel.Win32Exception] {Write-Host "`nDer DNS-CNAME Eintrag $autoddomain ist nicht vorhanden" -ForegroundColor Yellow}
                                                         }

$AutoDCNAMERecords | Out-Host

############Abfrage der SOA-Records aus dem DNS
Write-host "`nStart SOA Lookup" -ForegroundColor Magenta
$domains | resolve-dnsname -Type SOA -Server 8.8.8.8 | Select Name, PrimaryServer, NameAdministrator, TTL | Sort Name

Hoffe es hilft Euch!

Gruss Claudius

P.S. Die Idee kam Anfangs von Paul Cunningham https://practical365.com/use-powershell-to-quickly-check-multiple-mx-records/

Auslesen der DNS Informationen für Exchange Migrationen

About The Author
- Senior Exchange Engineer Im Bereich Exchange und O365 unterwegs, hauptsächlich bei grösseren Kunden. Im Bereich Exchange unterwegs seit ~2003 angefangen mit Exchange 5.5 bis nun Exchange 2019. Früher auch im Bereich Lync und Skype unterwegs gewesen. Motorrad-Enthusiast

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>