Powershell Skript: DNS-Server Check

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)
########################################################

Write-Host "DNS-Server Check 1.4"
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} | Where-Object {$_.TimeToLive -like '00:00:00'} | ForEach-Object {$_.RecordData} | ForEach-Object {$_.IPv4Address}).IPAddressToString
$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) {
    Write-Host ""
    Write-Host "ACHTUNG: Fehler gefunden!"
    if ($ldnscheck_status -like "1"){Write-Host "FEHLER: Einer der DNS-Server hat Probleme!"}
    if ($rdns_status -like "1"){Write-Host "FEHLER: Veraltete Root Server gefunden!"}
    exit 2
}
else {
    Write-Host ""
    Write-Host "Alles OK."
    exit 0
}

Schreibe einen Kommentar

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

*