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
- Connector auf dem Quellserver auslesen
- Connector auf dem Zielserver erstellen (oder aktualisieren)
- Feineinstellungen übernehmen (FQDN, AuthMechanisms, Banner, Limits etc.)
- 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.