Powershell Skript: DNS-Server Check

Hinweis: Wir haben in diesem Artikel möglicherweise Provisions-Links verwendet und sie durch (*) gekennzeichnet. Erfolgt über diese Links eine Bestellung, erhält maffert.net eine Provision. Es entstehen für Sie keine Nachteile beim Kauf oder Preis.

Der Check überwacht und testet die in der Netzwerkkarte eingetragenen DNS-Server und prüft ob die Root DNS Server / Root-Nameserver aktuell sind.

########################################################
# von Tobias Maffert - www.maffert.net - 03.2020
########################################################
# Was macht dieser Check:
# Ueberprueft die DNS-Server der Netzwerkkarte auf Fehler
# Ueberprueft die im DNS-Server eingetragenen DNS-Root Server
#
# Voraussetzungen:
# Erwartet die Eingabe einer URL (z.B. google.de)
#
# Changelog:
# 1.7 = Filter fuer das auslesen der DNS-Server IPs angepasst - machte auf manchen wegen der TTL groesser als 00 Probleme
########################################################

Write-Host "DNS-Server Check 1.7"
Write-Host "____________________________"
Write-Host ""

$url = $args[0]
[int]$ldnscheck_status = 0
[int]$rdns_status = 0

# Informationen einholen:
$IPType = 'IPv4'
$adapter = Get-NetAdapter | ? {$_.Status -eq "up"}
$ifindex = ($interface = $adapter | Get-NetIPInterface -AddressFamily $IPType -ErrorAction SilentlyContinue).ifindex
$ldns = (Get-DnsClientServerAddress -InterfaceIndex $ifindex -AddressFamily IPv4).ServerAddresses

Write-Host "DNS Test mit $url :"
# Pruefe die in der Netzwerkkarte eigetragenen DNS-Server
$ldnscheck = @()
$ldnscheckerg = @()
foreach ($ldnsein in $ldns) {
    $ldnscheck = (Resolve-DnsName -Name $url -Server $ldnsein -ErrorAction SilentlyContinue| where {$_.Type -eq "A"}).IPAddress 
        if (!$ldnscheck) {
            write-host "FEHLER bei DNS-Server $ldnsein!"
            $errorcount++
            $ldnscheck_status = 1
        }

    $ldnscheckerg += "DNS-Server $ldnsein" + " | Ausgabe: $ldnscheck"
}
if ($ldnscheck_status -like "0"){Write-Host "OK: Der Lokale DNS-Server funktioniert einwandfrei."}
$ldnscheckerg

Write-Host ""
Write-Host "DNS Root Server Check (Stammhinweise):"
## Uberpruefe die Root DNS Server
# Informationen einholen
$ips = (Get-DnsServerRootHint  | ForEach-Object {$_.IPAddress} | ForEach-Object {$_.RecordData} | ForEach-Object {$_.IPv4Address}).IPAddressToString | select -uniq
$server = Get-DnsServerRootHint | ForEach-Object {$_.NameServer} | ForEach-Object {$_.RecordData} | ForEach-Object {$_.NameServer}

# Root Server aufloesen
$Rips = @()
foreach ($serverein in $server) {
    $Rips += (Resolve-DnsName -Name $serverein | where {$_.Type -eq "A"}).IPAddress
}

# Root Server mit den aktuellen vergleichen und ggf. melden
$verroot = compare ("$ips") ("$Rips") | ForEach-Object {$_.InputObject}

if (! $verroot) {
    Write-Host "OK: alle Root Server sind aktuell."
}
else {
    Write-Host "FEHLER: veraltete Root Server gefunden, bitte pruefen!"
	$errorcount++
    $rdns_status = 1
}


# Fehlerbehandlung
if($errorcount -ge 1) {
    exit 2
}
else {
    exit 0
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert