PowerShell – Server mit bestimmtem DNS finden

Sie kennen sicher das Problem: Sie möchten einen DNS erneuern, abschalten oder austauschen. Dazu müssen Sie natürlich wissen, welcher Server den betroffenen DNS noch nutzt und konfiguriert hat.

Sie können sicher per Netscan herausfinden, welche Maschine noch über Port 53 Verbindungen zu dem jeweiligen DNS Server aufbaut. Sie können aber auch per Powershell ein Script verfassen, das per Get-WmiObject alle Maschinen im Netz fragt, ob der entsprechende DNS noch konfiguriert ist. Ein solches Script habe ich hier für Sie bereit gestellt.

Natürlich können Sie das Script noch weiter anpassen, so dass Sie mit Parametereingabe arbeiten können. Ansonsten tragen Sie unter $DNSIP die Adresse des DNS ein, den Sie überprüfen wollen. Das Script liest dann alle Computer der Domain mit Get-ADcomputer -filter * ein und fragt jeden einzelnen ab.

$DNSIP=”192.168.0.1″
$Servername = @(get-adcomputer -filter *).name

foreach($Server in $servername) {

if(Test-Connection -ComputerName $Server -Count 1 -ea 0) {

try {
$Networks = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName $Server -ErrorAction Stop
}

catch {
Write-Verbose “Failed to Query $Server. Error details: $_” continue
}

foreach($Network in $Networks) {
$DNS = $Network.DNSServerSearchOrder

If(!$DNS) {
$PrimDNS = “Notset”
$SecDNS = “Notset”

}

elseif($DNS.count -eq 1) {
$PrimDNS = $DNS[0]
$SecDNS = “Notset”
}

else {
$PrimDNS = $DNS[0]
$SecDNS = $DNS[1]
}

if ($DNS -like $DNSIP) {

$Output = New-Object -Type PSObject
$Output | Add-Member -MemberType NoteProperty -Name ComputerName -Value $Server.ToUpper()
$Output | Add-Member -MemberType NoteProperty -Name PrimaryDNSServers -Value $PrimDNS
$Output | Add-Member -MemberType NoteProperty -Name SecondaryDNSServers -Value $SecDNS

$Output
}
}
}

}