Startseite » Exchange » Exchange-Receive-Connector migrieren

Exchange-Receive-Connector migrieren

Hintergrund:
Viele Unternehmen stehen aktuell vor der Aufgabe, ihre letzten Exchange 2016 oder 2019 Server aus der Umgebung zu entfernen. Meistens laufen auf diesen Maschinen nicht nur Mailbox- oder Transportrollen, sondern auch dedizierte SMTP-Relay-Connectoren, die für Multifunktionsgeräte (z. B. Drucker/Scanner), Applikationen oder andere Systeme notwendig sind.

Connector migrieren – von Exchange 2016 / 2019 auf Exchange Server SE

Das Problem: Diese Receive-Connectoren müssen 1:1 auf die neuen Exchange-Server übernommen werden, sonst steht plötzlich Scan-to-Mail oder der Versand aus Business-Tools still.

In diesem Beitrag zeige ich, wie man mit einem kurzen PowerShell-Skript die Konfiguration eines bestehenden Receive-Connectors ausliest und auf einem anderen Exchange-Server automatisch anlegt oder aktualisiert.

Zielsetzung

  • Bestehende SMTP-Relay-Connectoren übernehmen
  • Downtime vermeiden (wichtige Systeme müssen weiter Mails versenden können)
  • Dokumentation gleich miterzeugen (Skript gibt Quelle und Ziel im Vergleich aus)
  • Zukunftssicher: Connector-Konfiguration lässt sich so auch später reproduzieren, falls Server ersetzt oder neu installiert werden.

Vorgehen

  1. Connector auf dem Quellserver auslesen
  2. Connector auf dem Zielserver erstellen (oder aktualisieren)
  3. Feineinstellungen übernehmen (FQDN, AuthMechanisms, Banner, Limits etc.)
  4. Ergebnis vergleichen (Skript zeigt Quelle und Ziel im Output)

PowerShell-Skript

Das folgende Skript liest einen Receive-Connector von einem Quellserver aus, erstellt ihn bei Bedarf auf dem Zielserver oder aktualisiert die bestehenden Einstellungen.

# --- Parameter ---
$SourceServer = "SOURCESERVER"
$SourceConnectorName = "Relay2016"
$TargetServer = "NEWSERVER"
$TargetConnectorName = "Relay2016"

# --- Quelle laden ---
$srcId = "$SourceServer\$SourceConnectorName"
$src = Get-ReceiveConnector -Identity $srcId -ErrorAction Stop

# --- Ziel prüfen ---
$dstId = "$TargetServer\$TargetConnectorName"
$dst = Get-ReceiveConnector -Identity $dstId -ErrorAction SilentlyContinue

# --- Eigenschaften übernehmen ---
$bindings            = $src.Bindings
$remoteIPRanges      = $src.RemoteIPRanges
$transportRole       = $src.TransportRole
$fqdn                = $src.Fqdn
$authMechanisms      = $src.AuthMechanisms
$permissionGroups    = $src.PermissionGroups
$protoLogLevel       = $src.ProtocolLoggingLevel
$banner              = $src.Banner
$tlsCertName         = $src.TlsCertificateName
$maxMessageSize      = $src.MaxMessageSize
$maxInboundConn      = $src.MaxInboundConnection
$maxInboundPerSource = $src.MaxInboundConnectionPerSource
$tarpit              = $src.TarpitInterval
$connectionTimeout   = $src.ConnectionTimeout

if (-not $dst) {
    Write-Host "Erstelle Receive Connector '$TargetConnectorName' auf $TargetServer..." -ForegroundColor Cyan
    New-ReceiveConnector `
        -Name $TargetConnectorName `
        -Server $TargetServer `
        -Bindings $bindings `
        -RemoteIPRanges $remoteIPRanges `
        -TransportRole $transportRole `
        -ProtocolLoggingLevel $protoLogLevel `
        -ErrorAction Stop
    $dst = Get-ReceiveConnector -Identity $dstId -ErrorAction Stop
} else {
    Write-Host "Aktualisiere bestehenden Receive Connector '$TargetConnectorName' auf $TargetServer..." -ForegroundColor Cyan
    Set-ReceiveConnector -Identity $dstId -Bindings $bindings -RemoteIPRanges $remoteIPRanges -ProtocolLoggingLevel $protoLogLevel -ErrorAction Stop
}

# --- Feineinstellungen setzen ---
Set-ReceiveConnector -Identity $dstId `
    -Fqdn $fqdn `
    -AuthMechanisms $authMechanisms `
    -PermissionGroups $permissionGroups `
    -Banner $banner `
    -TlsCertificateName $tlsCertName `
    -MaxMessageSize $maxMessageSize `
    -MaxInboundConnection $maxInboundConn `
    -MaxInboundConnectionPerSource $maxInboundPerSource `
    -TarpitInterval $tarpit `
    -ConnectionTimeout $connectionTimeout `
    -ErrorAction Stop

# --- Vergleich anzeigen ---
""
"Quelle ($srcId):"
$src | Format-List Name,Server,TransportRole,Fqdn,Bindings,RemoteIPRanges,AuthMechanisms,PermissionGroups,ProtocolLoggingLevel,MaxMessageSize,MaxInboundConnection,MaxInboundConnectionPerSource,TarpitInterval,ConnectionTimeout,TlsCertificateName,Banner

""
"Ziel   ($dstId):"
Get-ReceiveConnector -Identity $dstId | Format-List Name,Server,TransportRole,Fqdn,Bindings,RemoteIPRanges,AuthMechanisms,PermissionGroups,ProtocolLoggingLevel,MaxMessageSize,MaxInboundConnection,MaxInboundConnectionPerSource,TarpitInterval,ConnectionTimeout,TlsCertificateName,Banner

Vorteile dieser Lösung

  • Schnell & fehlerfrei: Kein manuelles Klicken durch die ECP-GUI.
  • Reproduzierbar: Kann für mehrere Connectoren oder Server genutzt werden.
  • Auditierbar: Gibt die komplette Konfiguration beider Server aus → perfekte Dokumentation.
  • Ideal für Migrationsphasen: Man kann Connectoren 1:1 umziehen, bevor der alte Server aus der Organisation entfernt wird.

Lessons Learned & Best Practices

  • Testlauf immer zuerst in einer Testumgebung oder mit einem Dummy-Connector machen.
  • Danach Scan-to-Mail oder Applikationen testen – so erkennt man sofort, ob Rechte (PermissionGroups) und Remote-IP-Ranges korrekt übernommen wurden.
  • Langfristig lohnt es sich, SMTP-Relay-Funktionalitäten zentral auf Exchange Online oder einen dedizierten Relay-Service zu konsolidieren, um On-Premises-Server vollständig abschalten zu können.
Foto des Autors
Autor

Nils Lappenbusch

Ich bin seit 2012 in der IT tätig. Seit 2020 bin ich Microsoft certified Trainer (MCT). Meine Schwerpunkte momentan liegen im Bereich Microsoft 365, Exchange 2016/2019. Die Begleitung der Einführung und Migration in die Cloud sind für mich spannende Aufgaben.

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden.