Primären und sekundären DNS-Server auf mehreren Systemen per Skript ändern

Dieser Eintrag betrifft Windows Server 2008 und Windows Server 2012. Wenn in der Netzwerkumgebung der DNS-Server-Name, die Konfiguration, ein Eintrag, etc. geändert werden soll, ist es häufig viel Arbeit, auf allen zugehörigen Servern und Clients den neuen DNS-Server einzutragen. Um diese Arbeit auf wenige Klicks zu reduzieren, stelle ich im Folgenden ein PowerShell Skript vor, um auf allen nötigen Systemen einen neuen DNS-Server einzutragen.

$servers = "sever1","server2",“client1“ foreach($server in $servers) { Write-Host "Connect to $server..." $nics = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $server -ErrorAction Inquire | Where{$_.IPEnabled -eq "TRUE"} $newDNS = "192.168.50.1","192.168.50.2" foreach($nic in $nics) { Write-Host "`tExisting DNS Servers " $nic.DNSServerSearchOrder    $x = $nic.SetDNSServerSearchOrder($newDNS) if($x.ReturnValue -eq 0) { Write-Host "`tSuccessfully changed DNS Servers on " $server } else { Write-Host "`tFailed to change DNS Servers on "$server } } }

*Anmerkung, aus Gründen der Lesbarkeit sind vor -Computer... und -ErrorAction... Zeilenumbrüche, diese gehören allerdings nicht ins Skript.

Hier müssen jetzt nur noch die Server unter „$servers“ eingetragen werden, bei denen eine DNS Server Änderung erfolgen soll (Anmerkung: die Anführungszeichen gehören zum Skript und müssen erhalten bleiben). Unter „$newDNS“ wird die Adresse des Neuen DNS-Servers eingetragen, die zweite Adresse steht dabei für den Alternativen DNS-Server. Falls dieser nicht benötigt wird, kann die zweite Adresse weggelassen werden.

Powershell Skripte werden als „.ps1“ Dateien gespeichert.

Das Skript kann von einem Domainadministrator gestartet werden. Ob dies auf dem Domaincontroller oder einem anderen Server gestartet wird, ist dabei nicht von Bedeutung.

Um das Skript starten zu können, muss in der PowerShell zunächst die Execution Policy geändert werden. Das passiert durch folgenden Befehl:

Set-ExecutionPolicy unrestricted

Die Änderung muss mit „y“ bestätigt werden.

Im Normalfall verhindert die Restriktion, dass Skripte von unbekannter Herkunft ausgeführt werden.

Nachdem die Restriktion aufgehoben ist, kann das Skript mit

.\DNSskript.ps1

aufgerufen werden.

Nach dem Ausführen bekommt man die Rückmeldung, dass der DNS-Server erfolgreich geändert wurde, bzw. meldet falls die Änderung nicht erfolgt ist.

Wenn die Änderungen abgeschlossen sind, sollte die Execution Policy wieder auf restricted gesetzt werden.

Set-ExecutionPolicy restricted