März 21, 2026

Receive connectors zu anderem Server kopieren

Update 2026-02-16: Extraschritte für Anonymous Relay an beliebige externe Empfänger hinzugefügt :-) 

Nach langer Zeit heute mal wieder ein kleiner Beitrag hier 🙂

Da ich in letzter Zeit wieder öfter Exchange Server „side-by-side“ migriere, habe ich ein kleines Skript geschrieben, mit dem ihr sehr einfach Receive connectors (auch mit langen Listen von RemoteIPRanges) zwischen Server kopieren könnt.

Das Skript geht davon aus, dass es auf dem Zielserver läuft und dass es die Connectors im Ziel noch nicht gibt. Wenn alles passt, legt es sie – standardmäßig mit einem zusätzlichen Suffix im Namen – dort neu an.

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn

$srcs = Get-ReceiveConnector | ogv -PassThru -Title "Select the source connector"

foreach ($src in $srcs) {
    # Name for the new connector
    $newName = "$($src.Name)_Copy"
    $server = $env:COMPUTERNAME
    $domain = (Get-WmiObject Win32_ComputerSystem).Domain

    # Workaround for connectors of type "Custom": remove "Custom" from PermissionGroups to allow creation
    if ($src.PermissionGroups -match "Custom") {
        $newpgs = ($src.PermissionGroups -replace " ", "" -split ",") | ? { $_ -ne "Custom" }
        $newpgs = $newpgs -join ", "
    }
    else{
        $newpgs = $src.PermissionGroups
    }

    # Base parameters for New-ReceiveConnector
    $params = @{
        Name                 = $newName
        Server               = $server
        Bindings             = $src.Bindings    
        AuthMechanism        = $src.AuthMechanism    
        RemoteIPRanges       = $src.RemoteIPRanges
        PermissionGroups     = $newpgs
    }

    # Dynamically add optional properties if they are set
    $optionalProps = @(
        'Fqdn', 'ProtocolLoggingLevel', 'TlsCertificateName', 'TlsDomainCapabilities',
        'AdvertiseClientSettings', 'EnableAuthGSSAPI', 'MaxInboundConnection',
        'MaxInboundConnectionPerSource', 'MaxInboundConnectionPercentagePerSource',
        'ConnectionInactivityTimeout', 'ConnectionTimeout', 'MessageRateLimit',
        'MaxHeaderSize', 'MaxHopCount', 'MaxInboundConnectionFailurePerMinute',
        'MaxLocalHopCount', 'MaxMessageSize', 'MaxProtocolErrors',
        'MaxRecipientsPerMessage', 'OrarEnabled', 'SizeEnabled',
        'TarpitInterval', 'Banner', 'Usage', 'TransportRole'
    )

    foreach ($prop in $optionalProps) {
        $value = $src.$prop
        if ($null -ne $value) {
            $params[$prop] = $value
            if ($prop -eq "Fqdn") { $params[$prop] = $server + "." + $domain }
        }        
    }

    # Create the new connector
    New-ReceiveConnector @params
}

Ich würde euch anschließend noch eine kurze Sichtprüfung empfehlen und Original und Kopie kurz nebeneinanderhalten. Sicher ist sicher 🙂

In einem Fall hatte ich bisher einen fehlenden Haken im Ziel (und noch keine Zeit, den Fehler zu finden). Aber auch so spart es einen Haufen Zeit.

Wenn einer oder mehrere Connectors zuvor für Anonymous Relay an beliebige (externe) Empfänger konfiguriert waren, sind noch 1-2 Extraschritte notwendig.

So prüft ihr, ob diese Option auf einem (Quell-)Connector Anonymous Relay aktiviert ist:

Get-ReceiveConnector | ogv -PassThru -Title "Select Receive Connector to READ" | Get-ADPermission | ?{$_.ExtendedRights -like "*Any-Recipient*"} | select identity,ExtendedRights,User

Wenn dort etwas wie folgt zurückgegeben wird, muss nachgearbeitet werden.

So könnt ihr die Option auf einem (Ziel-)Connector aktivieren:

$anonymous = (New-Object System.Security.Principal.SecurityIdentifier "S-1-5-7").Translate([System.Security.Principal.NTAccount]).Value

Get-ReceiveConnector | ogv -PassThru -Title "Select Receive Connector to WRITE"| Add-ADPermission -User $anonymous -ExtendedRights "Ms-Exch-SMTP-Accept-Any-Recipient"

0 0 Bewertungen
Article Rating
Abonnieren
Benachrichtigen bei
guest
0 Comments
Inline-Feedbacks
Alle Kommentare anzeigen
0
Deine Meinung würde uns sehr interessieren. Bitte kommentiere.x