DHCP Migration

Wenn man einen DHCP Server im Active Directory umziehen will, gibt es wenig automatische Möglichkeiten.

Die einfachste Variante ist den DHCP Server zu exportieren und auf dem neuen Server wieder zu importieren. Dazu kann man das folgende Script verwenden.

Das Script erledigt diese Schritte:

  • es fragt nach dem Namen des
    • Quellservers
    • Zielservers
  • auf dem Quellserver
    • exportiert es die DHCP Daten
    • entfernt es den DHCP Server im Active Directory
  • auf dem Zielserver
    • installiert es die notwendigen Rollen
    • importiert es die DHCP Daten
    • authorisiert es den DHCP Server im Active Directory

Ablaufplan

graph LR;
  A(Export auf altem Server) --> C[XML Datei]
  A --> B(Entfernen des alten Servers)
  C --> D(Installation der Dienste auf dem neuem Server)
  D --> E(Import auf neuem Server)
  E --> F(Registrieren des neuen Servers)

Script

# Export Pfad und Datei
$path="C:\DHCP-BACKUP"
$file="$path\dhcpexp.xml"
if (!(Test-Path $path -PathType Container))
{
	Write-Host Lege den Ordner für den DHCP Export an: $path
	New-Item -Path $path -ItemType Container
}

# Servernamen abfragen
$src=Read-Host -Prompt "DHCP Server der exportiert werden soll"
$dst=Read-Host -Prompt "DHCP Server in den importiert werden soll"

# Domain hinzufügen wenn notwendig
if ($src -notcontains ".") { $src = "$src.$($env:USERDNSDOMAIN)" }
if ($dst -notcontains ".") { $dst = "$dst.$($env:USERDNSDOMAIN)" }

function is_dhcp_server {
	param (
		[Parameter(Mandatory)]
		[ValidateNotNull()][string]$Server,
		[Parameter(Mandatory)]
		[ValidateNotNull()][array]$DhcpServers
	)
	# Ist der Server ein DHCP Server?
	if ($DhcpServers -contains $Server) {
		return $true
	} else {
		Write-Host -ForegroundColor Red Der Server $Server ist kein DHCP Server
		return $false
	}
	# Ist der Server erreichbar?
	if (!(Test-Connection -Quiet -Count 1 -TimeToLive 1 $Server)) {
		Write-Host -ForegroundColor Red Der Server $Server ist nicht erreichbar
		return $false
	}
}

# Installieren wenn notwendig
if (!(is_dhcp_server -Server $dst -DhcpServers $dhcpsrv)) {
	Install-WindowsFeature -Name 'DHCP' IncludeManagementTools
}

$dhcpsrv = Get-DhcpServerInDC | Select-Object -ExpandProperty DnsName
if (is_dhcp_server -Server $src -DhcpServers $dhcpsrv) {
	# exportieren und importieren
	Write-Host Exportiere den DHCP Server $src aus $file
	Export-DhcpServer -ComputerName $src -Leases -File $file Verbose
	Write-Host Importiere den DHCP Server $dst aus $file
	Import-DhcpServer ComputerName $dst -Leases File $file -BackupPath $path -Force Verbose
	Write-Host Stoppe und deaktiviere den alten DHCP Server $src
	Invoke-Command -ComputerName $src -ScriptBlock { Stop-Service -Name "DHCPServer"; Disable-Service -Name "DHCPServer" }
	Write-Host Entferne DHCP Server $src Authorisierung
	Remove-DhcpServerInDC $src
	Write-Host Setze DHCP Server $dst Authorisierung
	Add-DhcpServerInDC $dst
	# DHCP Server Neustarten
	Write-Host Starte den DHCP Server auf dem Zielserver $dst neu
	Restart-Service -Name "DHCPServer"
}