September 13, 2025

Receive connectors zu anderem Server kopieren

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.

0 0 votes
Article Rating
Abonnieren
Benachrichtige mich bei
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x