I already wrote about the migration from Exchange 2010 to Exchange 2016 here. Today it's the turn of the migration from Exchange 2013 to Exchange 2016.
Foreword
This guide describes the migration from Exchange 2013 to Exchange 2016 and is intended to provide an overview of the necessary steps and is therefore deliberately kept simple. Certificates and the namespace are to be transferred. As Exchange 2013 and Exchange 2016 are very similar, the migration is quite simple and will probably not cause any major problems in most cases.
One thing first: This is not a generally valid migration guide that can be applied to every Exchange 2013 organization. The migration should therefore be tried out in a test environment to get a feel for it.
Surroundings
The test environment consists of 3 Windows Server 2012 R2. One domain controller, one Exchange 2013 server and one Exchange 2016 server:
Exchange 2013 and Exchange 2016 are already installed.
To avoid problems during the migration, the Exchange organization should have the latest updates installed. At the time of this HowTo, the CU11 for Exchange 2013 is up to date. The download can be found here:
The Exchange 2016 installation in an existing Exchange 2013 organization is no different from the installation in a fresh environment. Only the question about the organization name is omitted. I will therefore save myself the trouble of describing the installation of Exchange 2016, as I have already done that here:
Exchange 2013 is configured to the following URLs:
- Server name: EX2013.frankysweb.local
- Outlook: outlook.frankysweb.de
- OWA, EWS, ActiveSync, OAB: outlook.frankysweb.de
- Outlook Anywhere: outlook.frankysweb.de
- Autodiscover: autodiscover.frankysweb.de
Exchange 2016 should use the following URLs:
- Server name: EX2016.frankysweb.local
- Outlook: outlook.frankysweb.de
- OWA, EWS, ActiveSync OAB: outlook.frankysweb.de
- Outlook Anywhere: outlook.frankysweb.de
- Autodiscover: autodiscover.frankysweb.de
Exchange 2016 should therefore use the same URLs as Exchange 2013 so that users do not have to get used to them.
MAPIoverHTTP is already activated and should be activated before the migration. How to activate MAPIoverHTTP is described here:
Preparation
As already mentioned, Exchange 2016 is already installed but not yet configured. The URLs are therefore configured first, the easiest way to do this is using the Exchange Management Shell:
$servername = "EX2016" $internalhostname = "outlook.frankysweb.de" $externalhostname = "outlook.frankysweb.de" $autodiscoverhostname = "autodiscover.frankysweb.de" $owainturl = "https://" + "$internalhostname" + "/owa" $owaexturl = "https://" + "$externalhostname" + "/owa" $ecpinturl = "https://" + "$internalhostname" + "/ecp" $ecpexturl = "https://" + "$externalhostname" + "/ecp" $ewsinturl = "https://" + "$internalhostname" + "/EWS/Exchange.asmx" $ewsexturl = "https://" + "$externalhostname" + "/EWS/Exchange.asmx" $easinturl = "https://" + "$internalhostname" + "/Microsoft-Server-ActiveSync" $easexturl = "https://" + "$externalhostname" + "/Microsoft-Server-ActiveSync" $oabinturl = "https://" + "$internalhostname" + "/OAB" $oabexturl = "https://" + "$externalhostname" + "/OAB" $mapiinturl = "https://" + "$internalhostname" + "/mapi" $mapiexturl = "https://" + "$externalhostname" + "/mapi" $aduri = "https://" + "$autodiscoverhostname" + "/Autodiscover/Autodiscover.xml" Get-OwaVirtualDirectory -Server $servername | Set-OwaVirtualDirectory -internalurl $owainturl -externalurl $owaexturl Get-EcpVirtualDirectory -server $servername | Set-EcpVirtualDirectory -internalurl $ecpinturl -externalurl $ecpexturl Get-WebServicesVirtualDirectory -server $servername | Set-WebServicesVirtualDirectory -internalurl $ewsinturl -externalurl $ewsexturl Get-ActiveSyncVirtualDirectory -Server $servername | Set-ActiveSyncVirtualDirectory -internalurl $easinturl -externalurl $easexturl Get-OabVirtualDirectory -Server $servername | Set-OabVirtualDirectory -internalurl $oabinturl -externalurl $oabexturl Get-MapiVirtualDirectory -Server $servername | Set-MapiVirtualDirectory -externalurl $mapiexturl -internalurl $mapiinturl Get-OutlookAnywhere -Server $servername | Set-OutlookAnywhere -externalhostname $externalhostname -internalhostname $internalhostname -ExternalClientsRequireSsl:$true -InternalClientsRequireSsl:$true -ExternalClientAuthenticationMethod 'Negotiate' Get-ClientAccessService $servername | Set-ClientAccessService -AutoDiscoverServiceInternalUri $aduri
Now the certificate of the Exchange 2013 server can be imported on the Exchange 2016 server (after it was exported on the Exchange 2013). I still find the easiest way to do this is via the MMC:
After the certificate has been imported, the certificate can be assigned to the Exchange services:
The certificate and URLs are now configured identically on both Exchange servers. Now the authentication settings still need to be synchronized, once for Outlook Anywhere:
and also for Outlook Web Access:
So that Exchange 2016 can also send emails, it must still be entered as the source server for the send connector:
So now we have an environment in which 2 Exchange servers are running in parallel. The preparations have been completed so far. Exchange 2016 will also answer autodiscover requests from the clients.
In the second part, we will take care of the actual migration. Coming soon...