Exchange Team Luxembourg
MIGRATE TO EXCHANGE 2019
​
If Exchange 2016 was Exchange 2013 in a pretty dress, then with Exchange 2019 it’s simply added a hat. In the past, every third Exchange release was a major rebuild, but Exchange 2016 is simply Exchange version 15.2 (Exchange 2016 was 15.1 and Exchange 2013 was version 15.0).
The Migration to Exchange 2019 is pretty much the same as it was from 2013 > 2016, or even 2016 > 2016.
- There should be NO Exchange 2010 servers in existence before deploying Exchange 2019. You would need to upgrade to 2013/2016 first.
- There’s no Unified Communications Role with Exchange any more! If you need to upgrade look at Skype for Business 2019.
- Edge Server Role is still supported.
- Windows Server Core (Server 2012 R2 and Server 2016) are now supported with Exchange 2019
- Windows Server 2016 and 2019 (With Desktop Experience) are supported host Operating systems.
Solution
As with all Exchange migrations make sure your Active Directory Domain/DNS/Existing Exchange organisation is healthy before you start. Then upgrade the existing Exchange to the latest cumulative update.
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
Exchange 2019 Prerequisites
​
1.You will need your Server 2012R2 or Server 2016 server fully updated and added to your domain, then to add the required roles and services use the following Powershell command:
​
Install-WindowsFeature AS-HTTP-Activation, Desktop-Experience, 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
2.You will need to install .Net 4.7.1
3.You need to install the MS Unified Communications API 4.0
4.You will also need to install Microsoft Visual C++
5.Don’t I need to extend the schema, forest or domain? The setup does all this for you, you don’t need to do this manually anymore, (yes you can manually do this before installing, if you want to, but unless your schema master is in a different root domain, or you’re not a schema admin, then I don’t see the point!)
6.Readiness Checks > Fix and Errors and heed any warnings > Install > The product will install, this will take a long time!
7.RESTART THE SERVER AND INSTALL PRODUCT KEY
8.Transfer Exchange Certificate to Exchange 2019
I’m using a wildcard certificate so I want to export the cert form my Exchange 2016 server and import it onto my new Exchange 2019 Server. You will want to do the same if you have a certificate with your public domain name on it and this will be your ‘internet facing’ Exchange server. Servers > Certificates > Select the Exchange 2016 Server, in the drop down menu > Select The Certificate > Click the ellipses (three dots) > Export Exchange Certificate > Supply a UNC path and password > OK.
9.Exchange 2019 Assign Services to Certificate
Select the newly imported certificate> Edit > Services > Select the services > Save > Note: Here I’m selecting SMTP and IIS. (You cant use a wildcard cert for IMAP,POP).
10.Exchange 2019 Rename Mailbox Database
Servers > Databases > Exchange always gives databases annoying names > Select the Database on the 2019 Exchange Server > Edit > Rename it > Save.
Note: The path to the Database retains the original name (we will fix that in the next step).
11.Exchange 2019 Move Mailbox Database
I’m pretty old school, I like my Exchange databases on their own drive/partition, and I like the logs on another drive/partition. To move both the Database and the Logs;
Move-DatabasePath -Identity Database-Name -EdbFilePath X:\Folder\Database\Database-Name.edb -LogFolderPath L:\Folder\Log-Folder\
12.Add Exchange 2019 to the Send Connector
Mail Flow > Send Connectors > Select your mail SMTP connector(s) > Edit > Scoping > Source Server section > Add > Add in the new server > OK > Save.
Note: The Exchange server will now need to have TCP port 25 (SMTP) open outbound on your corporate firewall.
13.Decommission Exchange 2016
From this point forward we are going to start getting rid of our Exchange 2016 server, they can of course coexist, (if you wanted to wait a while).
For that reason I change the ‘mail flow’ on the firewall to point to the new Exchange server at this point, and the HTTP access for OWA, Outlook Anywhere, and Phone/Tablet access
14.Exchange 2019 Mailbox Migration
Yes you can do this in the EAC, but I prefer to do this in PowerShell. But If I don’t put this here, I’ll get emails! Recipients > Migration > Add > Move to a different Database > Add in the mailboxes/users > Next.
Give the ‘Batch’ a name > Select to move Archive mailboxes (if you have them) > Select the destination (Exchange 2019) Database > Again if using archive mailboxes, select the target archive mailbox database > Set the bad Item limit to 99 > Next > Select Automatically Start > Select Automatically Finish > New.
From this point, this is where I don’t like the EAC it takes AGES to update with progress! From the Exchange Shell you can get an up to date view of that is going on!
Get-MoveRequest | Get-MoveRequestStatistics
15.Migrating Exchange System Mailboxes
Before you start issue the following command;
Set-AdServerSettings -ViewEntireForest $true
In addition to the user mailboxes there are a multitude of different ‘System mailboxes’ that might be hanging around, before we can get rid of the Exchange 2016 Database we need to migrate those.
Firstly AuditLog Mailboxes
Get-Mailbox -AuditLog -Database “Mailbox-Database-2016“
If there are any!
Get-Mailbox -AuditLog -Database “Mailbox-Database-2016” | New-MoveRequest -TargetDatabase “Mailbox-Database-2019“
16.Then Arbitration Mailboxes
Get-Mailbox -AuditLog -Database “Mailbox-Database-2016” -Arbitration
If there are any!
Get-Mailbox -AuditLog -Database “Mailbox-Database-2016” -Arbitration | New-MoveRequest -TargetDatabase “Mailbox-Database-2019“
17.Then Monitoring Mailboxes
Get-Mailbox -Monitoring -Server “Mail-2016“
If there are any!
Make sure there are no archive mailboxes;
Get-Mailbox -Auditlog -Database “Database-Name” -Archive
If there are, move them, (as above.)
Also move any Discovery mailboxes, and move them to 2019;
Get-Mailbox DiscoverySearchMailbox* | New-MoveRequest -TargetDatabase “Mailbox-Database-2019“
Delete Exchange 2016 Database(s)
When you are 100% sure theres nothing left on the old database(s) remove them;
Get-MailboxDatabase -Identity “Mailbox-Database-2016” | Remove-MailboxDatabase
Get-Mailbox -Monitoring -Server “Mail-2016” | New-MoveRequest -TargetDatabase “Mailbox-Database-2019“
18.Uninstall Exchange 2016
Your install directory may not be on the C: drive so change your path accordingly;
cd “C:\Program Files\Microsoft\Exchange Server\V15\Bin
setup.exe /mode:uninstall
At this point make sure your backup/replication software is pointed to the new Exchange 2019 Server.
​
FINISHED!!!
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
Exchange 2019 Prerequisites
You will need your Server 2012R2 or Server 2016 server fully updated and added to your domain, then to add the required roles and services use the following Powershell command;
Install-WindowsFeature AS-HTTP-Activation, Desktop-Experience, 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