DNS Konfiguration aller Active Directory Directory Services (AD DS) Computer ändern

Veröffentlicht in: Core, Powershell, Windows

Die Aufgabe hier war letztlich verhältnismäßig simpel:

Ändere (ersetze) die bisherige DNS Server Konfiguration aller VMs einer Umgebung in vorgegebene neue DNS Server.

Eine tolle Aufgabe für ein kleines PowerShell-Skript (oder einen Praktikanten 🙂 ) dachte ich mir und schrieb das folgende PS Script zusammen:
(inline Kommentare sollten zur Erläuterung ausreichend sein)

Clear-Host
# AD Computer Suchkriterien definieren, damit nicht alle geändert werden, nach Bedarf anzupassen
# Get—ADComputer -FiIter {OperatingSystem —Like ‚*Server*‘ -and Name -like „VM*“‚} select —Expand DNSHostName
$ServerVMs = Get—ADComputer -Filter {OperatingSystem —Like ‚*Server*‘ -and Name -like ‚VM*‘} | select —Expand DNSHostName

# neue DNS Server in Array SDNS schreiben
# weitere DNS Server durch weitere +=  Zeilen hinzufügen falls nötig!

$DNS =@()
$DNS += „DNS-Server1-IP-Adresse“
$DNS += „DNS-Server2-IP-Adresse“

ForEach ($ServerVM in $ServerVMs)
{
Write-Host Alle NICs in $ServerVM abfragen
Get-WmiObject Win32_NetworkAdapterCOnfiguration -ComputerName $ServerVM | where{$_.IPEnabled -eq $true -and $_.DHCPEnabled -eq $false}
$NICs = Get-WmiObject Win32_NetworkAdapterCOnfiguration -ComputerName $ServerVM | where{$_.IPEnabled -eq $true -and $_.DHCPEnabled -eq $false}

Write-Host DNS Servereinträge in allen NICs von $ServerVM ändern

ForEach ($NIC in $NICs)
{
Write-Host Bisherige DNS Server:
$NIC.DNSServerSearchOrder

# neue DNS Server in Netzwerkkarten Konfiguration eintragen
$NIC.SetDNSServerSearchorder($DNS)
}
}

PowerShell: Umstellung von dynamischer (per DHCP vergebener) auf statische IP Konfiguration

Veröffentlicht in: Allgemein, Powershell, VMM

Mit dem folgenden, nicht invasivem, also nur lesendem Skript kann man alle “Computername*” Systeme auf dynamische IP Konfiguration überprüfen:

Clear-Host

# ggf. für Vorarbeiten: Alle Clusternodes der Domain bestimmen
get-cluster -Domain QS | get-clusternode

# da Cluster auf eine IP Änderung evtl. mit einem Clusterdown aufgrund von Heartbeatverlust reagieren,
# wenn die Änderungen bei zwei Knoten des Cluster kurz hintereinander durchgeführt werden
# daher sollten Knoten mit dynamischer IP Konfiguration ggf. manuell, bzw.durch Ändern des
# „Name -like“ Suchparameters weiter unten, einzeln umgestellt werden

# Array $ServerVMs mit zu prüfenden VMs füllen, hier alle mit Server* OS und Computernamen die mit Computername* anfangen
$ServerVMs = Get-ADComputer -Filter {OperatingSystem -Like ‚*Server*‘ -and Name -like ‚Computername*‘} | select -Expand DNSHostName

#Schleife die jede der VMs des Arrays durchgeht
foreach ($ServerVM in $ServerVMs)
{
Write-Host Teste auf DHCP NICs in $ServerVM …

# Listet alle Systeme in $ServerVMs mit dynamischer IP Konfiguration
Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $ServerVM | where{$_.IPEnabled -eq $true -and $_.DHCPEnabled -eq $true}

}

 

Weiterhin kann das erweiterte Skript dann Systeme mit dynamischer auf statische IP Konfiguration umstellen und behält dabei die ehemals dynamischen Werte bei:

Clear-Host

# ggf. für Vorarbeiten: Alle Clusternodes der Domain bestimmen
get-cluster -Domain QS | get-clusternode

# da Cluster auf eine IP Änderung evtl. mit einem Clusterdown aufgrund von Heartbeatverlust reagieren,
# wenn die Änderungen bei zwei Knoten des Cluster kurz hintereinander durchgeführt werden
# daher sollten Knoten mit dynamischer IP Konfiguration ggf. manuell, bzw.durch Ändern des
# „Name -like“ Suchparameters weiter unten, einzeln umgestellt werden

# Array $ServerVMs mit zu prüfenden VMs füllen, hier alle mit Server* OS und Computernamen die mit ‚Computername*‘ anfangen
$ServerVMs = Get-ADComputer -Filter {OperatingSystem -Like ‚*Server*‘ -and Name -like ‚Computername*‘} | select -Expand DNSHostName

#Schleife die jede der VMs des Arrays durchgeht
foreach ($ServerVM in $ServerVMs)
{
Write-Host Teste auf DHCP NICs in $ServerVM …

# Array mit allen Netzwerkkarten mit dynamischer IP der spezifischen VM aufbauen
# durch weglassen von „$NICs =“ an anfagng, bekommt man die betroffenen Systeme (mit dynamischer IP) aufgelistet
# dann sollte aber auch die (äußere) ForEach Schleife mit <# #> auskommentiert werden
$NICs = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $ServerVM | where{$_.IPEnabled -eq $true -and $_.DHCPEnabled -eq $true}

# Für jede dieser Netzwerkkarten die  Umstellung auf statische IP Konfiguration
# unter Beibehaltung der Daten der dynamischen Konfiguration (IP, Subnetz, Gateway, DNS Server)
ForEach ($NIC in $NICs)
{
# bisherige IP Daten in $ip, $subnet, $gateway, $dns schreiben
$ip = ($NIC.IPAddress[0])
$subnet = $NIC.IPSubnet[0] $gateway = $NIC.DefaultIPGateway
$dns = $NIC.DNSServerSearchOrder

# statische Konfiguration aktivieren, mit den Daten aus der dynamischen Konfiguration
$NIC.EnableStatic($ip,$subnet)
$NIC.SetGateways($gateway,1)
$NIC.SetDNSServerSearchOrder($dns)
$NIC.SetDynamicDNSRegistration(„FALSE“)
}
}