Whether it’s because you’re adding additional Exchange Servers to your existing organization, or you are moving to a new version of Exchange, copying Receive Connectors from one server to another can be a time consuming task.
Using the commands below at the Exchange Management Shell, you can get the existing non-default Receive Connectors from an Exchange Server and create matching ones on another.
To perform this task, we’ll first set two variables to define the source and target servers:
$OldServer = “OldServer”
$NewServer = “NewServer”
Then, we’ll retrieve the list of non-default Receive Connectors from the source server into the variable $ReceiveConnectors:
[array]$ReceiveConnectors = Get-ReceiveConnector -Server $OldServer | Where {$_.Name -notlike “Default $($OldServer)“ -and $_.Name -notlike “Client $($OldServer)“}
To create the Receive Connectors on the target server, we can use a foreach loop to create new receive connectors, populating the values from the source. Before we actually make any changes, we’ll run the commands with the -WhatIf switch to check the syntax and the validity of the command:
$ReceiveConnectors | foreach {
New-ReceiveConnector -Name $_.Name -RemoteIPRanges $_.RemoteIPRanges -bindings $_.Bindings -Banner $_.Banner -ChunkingEnabled $_.ChunkingEnabled -DefaultDomain $_.DefaultDomain -DeliveryStatusNotificationEnabled $_.DeliveryStatusNotificationEnabled -EightBitMimeEnabled $_.EightBitMimeEnabled -DomainSecureEnabled $_.DomainSecureEnabled -LongAddressesEnabled $_.LongAddressesEnabled -OrarEnabled $_.OrarEnabled -Comment $_.Comment -Enabled $_.Enabled -ConnectionTimeout $_.ConnectionTimeout -ConnectionInactivityTimeout $_.ConnectionInactivityTimeout -MessageRateLimit $_.MessageRateLimit -MaxInboundConnection $_.MaxInboundConnection -MaxInboundConnectionPerSource $_.MaxInboundConnectionPerSource -MaxInboundConnectionPercentagePerSource $_.MaxInboundConnectionPercentagePerSource -MaxHeaderSize $_.MaxHeaderSize -MaxHopCount $_.MaxHopCount -MaxLocalHopCount $_.MaxLocalHopCount -MaxLogonFailures $_.MaxLogonFailures -MaxMessageSize $_.MaxMessageSize -MaxProtocolErrors $_.MaxProtocolErrors -MaxRecipientsPerMessage $_.MaxRecipientsPerMessage -PermissionGroups $_.PermissionGroups -PipeliningEnabled $_.PipeLiningEnabled -ProtocolLoggingLevel $_.ProtocolLoggingLevel -RequireEHLODomain $_.RequireEHLODomain -RequireTLS $_.RequireTLS -EnableAuthGSSAPI $_.EnableAuthGSSAPI -ExtendedProtectionPolicy $_.ExtendedProtectionPolicy -ExtendedProtectionTlsTerminatedAtProxy $_.ExtendedProtectionTlsTerminatedAtProxy -SizeEnabled $_.SizeEnabled -TarpitInterval $_.TarpitInterval -Server $NewServer -WhatIf
}
If we’re happy with the output, then we can run the command without the -WhatIf switch to create the new receive connectors:
$ReceiveConnectors | foreach {
New-ReceiveConnector -Name $_.Name -RemoteIPRanges $_.RemoteIPRanges -bindings $_.Bindings -Banner $_.Banner -ChunkingEnabled $_.ChunkingEnabled -DefaultDomain $_.DefaultDomain -DeliveryStatusNotificationEnabled $_.DeliveryStatusNotificationEnabled -EightBitMimeEnabled $_.EightBitMimeEnabled -DomainSecureEnabled $_.DomainSecureEnabled -LongAddressesEnabled $_.LongAddressesEnabled -OrarEnabled $_.OrarEnabled -Comment $_.Comment -Enabled $_.Enabled -ConnectionTimeout $_.ConnectionTimeout -ConnectionInactivityTimeout $_.ConnectionInactivityTimeout -MessageRateLimit $_.MessageRateLimit -MaxInboundConnection $_.MaxInboundConnection -MaxInboundConnectionPerSource $_.MaxInboundConnectionPerSource -MaxInboundConnectionPercentagePerSource $_.MaxInboundConnectionPercentagePerSource -MaxHeaderSize $_.MaxHeaderSize -MaxHopCount $_.MaxHopCount -MaxLocalHopCount $_.MaxLocalHopCount -MaxLogonFailures $_.MaxLogonFailures -MaxMessageSize $_.MaxMessageSize -MaxProtocolErrors $_.MaxProtocolErrors -MaxRecipientsPerMessage $_.MaxRecipientsPerMessage -PermissionGroups $_.PermissionGroups -PipeliningEnabled $_.PipeLiningEnabled -ProtocolLoggingLevel $_.ProtocolLoggingLevel -RequireEHLODomain $_.RequireEHLODomain -RequireTLS $_.RequireTLS -EnableAuthGSSAPI $_.EnableAuthGSSAPI -ExtendedProtectionPolicy $_.ExtendedProtectionPolicy -ExtendedProtectionTlsTerminatedAtProxy $_.ExtendedProtectionTlsTerminatedAtProxy -SizeEnabled $_.SizeEnabled -TarpitInterval $_.TarpitInterval -Server $NewServer
}
Hello,
Thanks for this. I am not able to get this going. When I past in the last part I just get a >> prompt. Any ideas
did you try hitting enter three four times?
probably a } is missing
Thanks
I just get the following error trying to copy from 2007 to 2013:
A parameter cannot be found that matches parameter name ‘ExtendedProtectionTlsTerminatedAtProxy’.
+ CategoryInfo : InvalidArgument: (:) [New-ReceiveConnector], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,New-ReceiveConnector
Where you able to figure this out. I received same message?
Getting the same error too any ideas?
HI,
I succeeded in using the command to copy the connectors from 2007 to 2013 in my lab.
At first I had the same errors so I copied the command to notepad ++, there I ordered the syntax in a single line and removed (-ExtendedProtectionTlsTerminatedAtProxy $ _. ExtendedProtectionTlsTerminatedAtProxy) because I do not have a TMG or proxy configured.
You missed out the AuthMechanism property so the new connectors don’t match the originals.