Moving SCP/OutlookAnywhere to new DNS name

In this example we need to move the SCP and OutlookAnywhere from name from autodiscover.bears.local to autodiscover.a6n.co.uk

Exchange has many components that make up the e-mail service, these are shown below, this guide will be focusing on the ones in bold, the other ones will not be updated with this guide, if you have a requirement for these services to be updated please see the end of the guide - the section updated "out of scope components"

AutoDiscover https://autodiscover.a6n.co.uk/Autodiscover/Autodiscover.xml
Exchange Control Panel https://grr-exch.bear.local/ecp
Exchange Web Services https://grr-exch.bear.local/EWS/Exchange.asmx
Exchange ActiveSync https://grr-exch.bear.local/Microsoft-Server-ActiveSync
Offline Address Book https://grr-exch.bear.local/OAB
Outlook Web App https://grr-exch.bear.local/owa
MAPI over HTTP https://grr-exch.bear.local/mapi
Outlook Anywhere grr-exch.bear.local

WARNING : This is SSL traffic so ensure you have the new name in the certificate before you issue these commands, failure to complete this step will means Outlook will give you certificate errors and that is not a nice user experience.

First you need to update the Autodiscover URL from the old entry to the new entry, so to get the current entries you need this command:

Get-ClientAccessService | FL Fqdn,AutoDiscoverServiceInternalUri

This will return the results you require:

Fqdn                           : Grr-EX1.bears.local
AutoDiscoverServiceInternalUri : https://autodiscover.bears.local/Autodiscover/Autodiscover.xml
Fqdn                           : Grr-EX2.bears.local

AutoDiscoverServiceInternalUri : https://autodiscover.bears.local/Autodiscover/Autodiscover.xml

You can update the new SCP in one PowerShell command, which is nice and convenient, ensure you check for spelling errors or syntax issues:

Get-ClientAccessServer | Set-ClientAccessServer -AutoDiscoverServiceInternalUri "https://autodiscover.a6n.co.uk/autodiscover/autodiscover.xml" -AutoDiscoverSiteScope "FluffyCloud"

If you need to switch back to "old" SCP then its best to get that ready so if you need it you can rollback quickly:

Get-ClientAccessServer | Set-ClientAccessServer -AutoDiscoverServiceInternalUri "https://autodiscover.bears.local/Autodiscover/Autodiscover.xml" -AutoDiscoverSiteScope "FluffyCloud"

Once this is complete, your Outlook will still be connecting the old OutlookAnywhere name so now its time to update that as well, this will take longer to replicate around the domain, so its not immediate, first check what is set:

Get-OutlookAnywhere | fl ServerName,InternalHostname

ServerName       : Grr-EX1.bears.local
InternalHostname : autodiscover.bears.local

ServerName       : Grr-EX2.bears.local
InternalHostname : autodiscover.bears.local

Here, the old name is autodiscover.bears.local and we need to switch to new OutlookAnywhere on autodiscover.a6n.co.uk, for this you need to do each servers individually as this one will impact your Outlook connections:

Get-OutlookAnywhere -Server Grr-EX1.bears.local | Set-OutlookAnywhere -InternalHostname autodiscover.a6n.co.uk

That failed as I was told that that -InternalClientsRequireSSL  needs to specified as well, well that is simple here it is $True so lets add that to the command:

Get-OutlookAnywhere -Server Grr-EX1.bears.local | Set-OutlookAnywhere -InternalHostname autodiscover.a6n.co.uk -InternalClientsRequireSSL $True

Get-OutlookAnywhere -Server Grr-EX1.bears.local | Set-OutlookAnywhere -InternalHostname autodiscover.a6n.co.uk -InternalClientsRequireSSL $True

Its also wise to have the failback to the old OutlookAnywhere ready, just in-case you need it:

Get-OutlookAnywhere -Server Grr-EX1.bears.local | Set-OutlookAnywhere -InternalHostname autodiscover.bears.local

Get-OutlookAnywhere -Server Grr-EX1.bears.local | Set-OutlookAnywhere -InternalHostname autodiscover.bears.local

Updating out of scope components

Replace <servername> with your server name, the <new-external-url> with the new external URL as per the top of this guide for the path and then <new-internal-url>

The first command sets the new value, the second command checks what has been set!

ECP

Get-EcpVirtualDirectory -Server <servername> | Set-EcpVirtualDirectory -ExternalUrl <new-external-url> -InternalUrl <new-internal-url>
Get-EcpVirtualDirectory -Server <servername> | Format-List InternalUrl, ExternalUrl

EWS

Get-WebServicesVirtualDirectory -Server <servername> | Set-WebServicesVirtualDirectory -ExternalUrl <new-external-url> -InternalUrl <new-internal-url>
Get-WebServicesVirtualDirectory -Server <servername> | Format-List InternalUrl, ExternalUrl

MAPI

Get-MapiVirtualDirectory -Server <servername> | Set-MapiVirtualDirectory -ExternalUrl <new-external-url> -InternalUrl <new-internal-url>
Get-MapiVirtualDirectory -Server <servername> | Format-List InternalUrl, ExternalUrl

ActiveSync

Get-ActiveSyncVirtualDirectory -Server <servername> | Set-ActiveSyncVirtualDirectory -ExternalUrl <new-external-url> -InternalUrl <new-internal-url>
Get-ActiveSyncVirtualDirectory -Server <servername> | Format-List InternalUrl, ExternalUrl

OAB

Get-OabVirtualDirectory -Server <servername> | Set-OabVirtualDirectory -ExternalUrl <new-external-url> -InternalUrl <new-internal-url>
Get-OabVirtualDirectory -Server <servername> | Format-List InternalUrl, ExternalUrl

OWA

Get-OwaVirtualDirectory -Server <servername> | Set-OwaVirtualDirectory -ExternalUrl <new-external-url> -InternalUrl <new-internal-url>
Get-OwaVirtualDirectory -Server <servername> | Format-List InternalUrl, ExternalUrl

Powershell

Get-PowerShellVirtualDirectory -Server <servername> | Set-PowerShellVirtualDirectory -ExternalUrl <new-external-url> -InternalUrl <new-internal-url>
Get-PowerShellVirtualDirectory -Server <servername> | Format-List InternalUrl, ExternalUrl