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"
}