HowTo: Migration from Exchange 2013 to Exchange 2016 (Part 1)

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:

Test environment migration

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:

Certificate

After the certificate has been imported, the certificate can be assigned to the Exchange services:

Certificate

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:

Outlook Anywhere

Outlook Anywhere

and also for Outlook Web Access:

Outlook Web Access

Outlook Web Access

So that Exchange 2016 can also send emails, it must still be entered as the source server for the send connector:

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...

5 thoughts on “HowTo: Migration von Exchange 2013 zu Exchange 2016 (Teil 1)”

  1. Hallo Frank
    Zuerst einmal herzlichen Dank jeweils für die ausführlichen Anleitungen. Ich greife immer wieder gerne auf diese zurück, so sind Stolpersteine wie fehlende Server-Funktionen von vorherein kein Thema.

    Nun hätte ich eine Frage zu den externen und internen URL’s: Sind am umstellen von Ex2013 auf Ex2019. Nun haben wir das Problem das Autodiscover den Clients unterschiedliche URL’s mitteilt (als interne URL den 13er und als externe URL den 19er)! Auf den Servern sind für jeden Server eigene FQDN’s konfiguriert, da noch einige wenige Clients mit Office 2010 unterwegs sind und dies noch ein paar Monate so sein wird. Der Autodiscover zeigt immer noch auf den alten Ex2013.
    War / ist es nicht so, dass Autodiscover anhand des msExchHomeServerName-Attributs im AD den Clients die URL mitteilt die der jeweilige Exchange konfiguriert hat? Liege ich falsch, oder überseh ich da was?

    Besten Dank für deinen Tipp.

    Reply
  2. Hallo Frank, du schreibst „Exchange 2016 wird auch schon Autodiscover Anfragen der Clients beantworten.“
    Kann man das umgehen?
    Ich habe nun das Problem gehabt, ohne Ausfall von Exchange 2007 auf Exchange 2013 zu wecheln. Anwender nutzen Office 2010.
    In dem Punkt haben wir auch mapi aktiviert. Nun das Problem, wir haben Exchange 2016 nur installiert, danach haben über 50% der Clients sich nicht mehr starten lassen und haben nach dem neuen Exchange gefragt, interner Name mit Zertifikat. Das Outlook Profil neu anlegen hat geholfen, warum ging es plötzlich bei einigen nicht mehr? Wieso fragt das Outlook plötzlich den Exchange 2016, obwohl alles auf dem Exchange 2013 läuft. Ich habe testweise die URLs gleich gesetzt, Zertifikat hinterlegt, trotzdem hat es nichts geholfen. Weder das der Exchange 2016 aus war oder an, die Clients liessen sich nicht mehr mit dem alten Profil starten. Nur in einem gewissen Moment als der Exchange 2016 neustartete.
    Auch die Deinstallation des Exchange 2016 hat nichts gebessert. Die CLients wollten einfahc nicht mehr mit Exchange 2013 verbinden und haben ständig versucht den Exchange mit dem internen Namen zu finden.

    Reply

Leave a Comment