Have a Question?
< All Topics
Print

Install Exchange 2016 in Exchange 2010 Organization

Tutorial on how to install Exchange 2016 in Exchange 2010 Organization

Exchange 2016 server pre-requisites

Prepare a Windows 2016 Standard Server with

Install required Windows Features

#Install PreRequisite 
Install-WindowsFeature NET-Framework-45-Features, RPC-over-HTTP-proxy, RSAT-Clustering, RSAT-Clustering-CmdInterface, RSAT-Clustering-Mgmt, `
    RSAT-Clustering-PowerShell, Web-Mgmt-Console, WAS-Process-Model, Web-Asp-Net45, Web-Basic-Auth, `
    Web-Client-Auth, Web-Digest-Auth, Web-Dir-Browsing, Web-Dyn-Compression, Web-Http-Errors, Web-Http-Logging, `
    Web-Http-Redirect, Web-Http-Tracing, Web-ISAPI-Ext, Web-ISAPI-Filter, Web-Lgcy-Mgmt-Console, Web-Metabase, `
    Web-Mgmt-Console, Web-Mgmt-Service, Web-Net-Ext45, Web-Request-Monitor, Web-Server, Web-Stat-Compression, `
    Web-Static-Content, Web-Windows-Auth, Web-WMI, Windows-Identity-Foundation, RSAT-ADDS

#Restart Server
Restart-Computer

Forest & Domain Functional Level

Verify the existing Forest & Domain Functional Level is Windows 2008R2 or later

#Domain Functional Level
PS C:\Windows> Get-ADDomain | Select-Object DomainMode, DistinguishedName 
       DomainMode DistinguishedName
       ---------- -----------------
Windows2003Domain DC=lab,DC=local  

#Forest Functional Level
PS C:\Windows> Get-ADForest | Select-Object ForestMode
       ForestMode
       ----------
Windows2003Forest

Raise both Forest & Domain Functional Level to Windows 2008R2

#Raise AD Domain & Forest Functional Level to 2008R2 
$ADDomainPDC = Get-ADDomainController -Discover -Service PrimaryDC
$ADForest = Get-ADForest

Set-ADDomainMode -Identity $ADDomainPDC.Domain -Server $ADDomainPDC.HostName[0] -DomainMode Windows2008R2Domain
Set-ADForestMode -Identity $ADForest -Server $ADForest.SchemaMaster -ForestMode Windows2008R2Forest

Verify the version of existing AD Schema

ObjectVersion = 47 (Windows Server 2008 R2) – https://www.msnoob.com/hhw-to-check-ad-schema-version-using-powershell-command.html

PS C:\Windows> #Check AD Schema Version 
Get-ADObject (Get-ADRootDSE).schemaNamingContext -Property objectVersion

DistinguishedName : CN=Schema,CN=Configuration,DC=lab,DC=local
Name              : Schema
ObjectClass       : dMD
ObjectGUID        : fe5052e9-6c3a-4938-b992-51a785f89c6a
objectVersion     : 47

Install Exchange 2016 in Exchange 2010 Organization

Mount the Exchange 2016 ISO File as D Drive and start to extend AD Scheme, Prepare AD Domain and Install Exchange 2016

#prepare AD Schema 
D:\setup.exe /ps /IAcceptExchangeServerLicenseTerms

#Prepare AD 
D:\setup.exe /PrepareAD /IAcceptExchangeServerLicenseTerms

#Prepare Domain 
D:\setup.exe /PrepareDomain /IAcceptExchangeServerLicenseTerms

#Install Exchange 2016
D:\Setup.exe /m:Install /Roles:Mailbox /IAcceptExchangeServerLicenseTerms 

Restart-Computer

Login to Exchange 2016 ECP with https://LAB-EX16/ecp?ExchClientVer=15 instead of https://mail.aventis.dev/ecp which will redirect you back to Exchange 2010 as the Administrator Mailbox is still located in Exchange 2010

You can migrate the Administrator’s Mailbox from Exchange 2010 to 2016 to overcome this issue

$Mailbox = "[email protected]"
$TargetDB = "LOCAL-EX16"

New-MoveRequest -Identity $Mailbox -TargetDatabase $TargetDB

# Monitor the Progress of the Move Request
Get-MoveRequest | Get-MoveRequestStatistics

DisplayName   StatusDetail TotalMailboxSize      TotalArchiveSize PercentComplete
-----------   ------------ ----------------      ---------------- ---------------
Administrator Completed    4.78 KB (4,895 bytes)                  100            

Rename Virtual Directory

Open PowerShell ISE in Exchange 2016 Server

#Connect to Exchange 2016 in PowerShell ISE
. 'C:\Program Files\Microsoft\Exchange Server\V15\bin\RemoteExchange.ps1'
Connect-ExchangeServer -auto

Rename the Local Mailbox Database

#Rename Default Mailbox Database
Get-MailboxDatabase | Set-MailboxDatabase -Name LOCAL

Change all the Virtual Directory to use mail.aventis.dev

#Change OWA, ECP, EWS, OAB, PowerShell, MAPI, ActiveSync and Outlook Anywhere
$URL = "https://mail.aventis.dev/"
$OWA = $URL + "owa"
$ECP = $URL + "ecp"
$EWS = $URL + "EWS/Exchange.asmx"
$OAB = $URL + "OAB"
$PowerShell = $URL + "Powershell"
$ActiveSync = $URL + "Microsoft-Server-ActiveSync"
$Mapi = $URL + "mapi"
$OutlookAnywhere = "mail.aventis.dev"

Get-OwaVirtualDirectory | Set-OwaVirtualDirectory -InternalUrl $OWA -ExternalUrl $OWA -DefaultDomain "Aventislab.local" -LogonFormat Username
Get-ECPVirtualDirectory | Set-ECPVirtualDirectory -InternalUrl $ECP -ExternalUrl $ECP
Get-WebServicesVirtualDirectory | Set-WebServicesVirtualDirectory -InternalUrl $EWS -ExternalUrl $EWS
Get-OabVirtualDirectory | Set-OabVirtualDirectory -InternalUrl $OAB -ExternalUrl $OAB
Get-PowerShellVirtualDirectory | Set-PowerShellVirtualDirectory -InternalUrl $PowerShell -ExternalUrl $PowerShell
Get-ActiveSyncVirtualDirectory | Set-ActiveSyncVirtualDirectory -InternalUrl $ActiveSync -ExternalUrl $ActiveSync
Get-MapiVirtualDirectory | Set-MapiVirtualDirectory -InternalUrl $Mapi -ExternalUrl $Mapi
Get-OutlookAnywhere | Set-OutlookAnywhere -InternalHostname $OutlookAnyWhere -ExternalHostname $OutlookAnyWhere -ExternalClientsRequireSsl $false `
-InternalClientsRequireSsl $false -DefaultAuthenticationMethod negotiate

SSL Certificate

Export the SSL Certificate from existing Exchange 2010 Server and import it to Exchange 2016

#Import PFX 
$PFXPassword = ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force
Import-PfxCertificate -FilePath C:\temp\AventisLab.pfx -CertStoreLocation Cert:\LocalMachine\My -Password $PFXPassword

#Assign Wildcard Cert to Exchange IIS & SMTP Services
$Cert = Get-ExchangeCertificate | ? Subject -like "*.aventislab*"
Enable-ExchangeCertificate -Thumbprint $Cert.Thumbprint -Services IIS, SMTP -Force

Service Connection Point (SCP)

Change the Internal SCP URL to Exchange 2016

Set-ClientAccessService -Identity LAB-EX16 -AutodiscoverServiceInternalURI “https://autodiscover.aventis.dev/Autodiscover/Autodiscover.xml”

Send Connector

Add the new Exchange 2016 Server as Source Transport in existing Send Connector

Get-SendConnector | Set-SendConnector -SourceTransportServers LAB-EX10, LAB-EX16

Basic Authentication for External – Outlook Anywhere

Set the ExternalClientAuthenticationMethod to Basic to allow Exchange 2016 to proxy the connection to Exchange 2010 transparently

Get-OutlookAnywhere -Server LAB-EX16 | Set-OutlookAnywhere -ExternalClientAuthenticationMethod basic

Disabled Windows Defender (Optional)

Uninstall the Windows Defender to minimize the RAM usage in Exchange 2016 installed in my lab

Uninstall-WindowsFeature -Name Windows-Defender
Table of Contents
Scroll to Top