How to Upgrade Exchange 2013 to Exchange 2019 ---------------------------------------------- # Exchange Server Requirements: https://docs.microsoft.com/en-us/exchange/plan-and-deploy/system-requirements?view=exchserver-2019 1. Active Directory Prerequisites ---------------------------------- • Domain Controller: All domain controllers in the forest need to be running Windows Server 2012 R2 Standard/Datacenter or later • Global catalog: In each AD site where you plan to install Exchange 2019, you must have a writable DC that's also a GC. • Active Directory Forest: Forest functional level must be Windows Server 2012R2 or higher. • Installing Exchange 2019 on a DC is not recommended. 2. Supported clients -------------------- • Microsoft 365 Apps for enterprise • Outlook 2013 or later • Outlook for Mac for Office 365 or Outlook 2016 for Mac 3. Active Directory Prerequisites And Health Check Commands: ------------------------------------------------------------ #Check the Domain Controllers Get-ADDomainController -Filter * | ft Name,OperatingSystem,Domain,Site -auto #Check Domain Level Get-ADDomain | fl *Domain*,PDC*,*Master,Read*,Replica* #Check Forest Level Get-ADForest | fl *Mode,*Catalogs,*Sites,*Master #Initiate a push and pull replication and check the result repadmin /syncall /AeP repadmin /syncall /Ae repadmin /replsum #Run DCDiag DNS test - separately, in verbose mode: dcdiag /test:DNS /v /e /f:dcdiag-DNS.log #(Optional) Run DNSLINT utility with /ad for AD replication tests: #Available at https://support.microsoft.com/kb/321045 #or at https://www.netometer.com/downloads/tools/dnslint.v204.exe #Note: Replace the IP with an actual DC IP address .\dnslint /ad /s localhost /v #Run DCDIAG without DNS test(we add the debug switch /d for more details): dcdiag /v /d /skip:DNS /f:dcdiag.log 4. Exchange Prerequisites And Checks 4.1 Exchange 2013 CU21 or later on all Exchange 2013 servers in the organization Microsoft CSS-Exchange repository on GitHub https://microsoft.github.io/CSS-Exchange/Diagnostics/HealthChecker/ Get-AuthenticodeSignature -FilePath HealthChecker.ps1 .\HealthChecker.ps1 .\HealthChecker.ps1 -BuildHtmlServersReport 4.2 Configure the default offline address book on the existing mailbox databases 4.3 Export the existing Exchange certificate 4.4 Check and document Mailbox Storage Quotas (Exchanage 2019 DBs should have at least the same or larger storage quotas) Get-MailboxDatabase | fl Name,*Quota* 4.5 Check and document the namespaces Get-OutlookAnywhere -ADPropertiesOnly | fl Server,InternalHostName,ExternalHostName Get-OwaVirtualDirectory -ADPropertiesOnly | fl Server,InternalURL,ExternalURL Get-ECPVirtualDirectory -ADPropertiesOnly | fl Server,InternalURL,ExternalURL Get-OABVirtualDirectory -ADPropertiesOnly | fl Server,InternalURL,ExternalURL Get-WebServicesVirtualDirectory -ADPropertiesOnly | fl Server,InternalURL,ExternalURL Get-OrganizationConfig | fl MapiHttpEnabled Get-MAPIVirtualDirectory -ADPropertiesOnly | fl Server,InternalURL,ExternalURL Get-ActiveSyncVirtualDirectory -ADPropertiesOnly | fl Server,InternalURL,ExternalURL Get-PowerShellVirtualDirectory -ADPropertiesOnly | fl Server,InternalURL,ExternalURL Get-ClientAccessServer | fl Identity,AutoDiscoverServiceInternalUri 4.5 Check and Document the email routing topology - Outbound email flow (send connectors - do we have a smarthost): Get-SendConnector | fl name,source*,enabled,smart* - Inbound email flow Get-ReceiveConnector - Custom connectors Get-ReceiveConnector "EX1-13\Relay Accounting" | fl name,*role,remote*,permission*,enabled,comment,banner,max* 5. Prepare Active Directory and Domains. Install Exchange Prerequisites. ------------------------------------------------------------------------ 5.1 Configure Exchange DB and Logs Volumes. Get-Disk 1 | New-Partition -UseMaximumSize -DriveLetter D | Format-Volume -FileSystem REFS -AllocationUnitSize 65536 -NewFileSystemLabel DB -SetIntegrityStreams $false Get-Disk 2 | New-Partition -UseMaximumSize -DriveLetter E | Format-Volume -FileSystem REFS -AllocationUnitSize 65536 -NewFileSystemLabel Logs -SetIntegrityStreams $false 5.2 Install Prerequisites. - .NET Framework 4.8 https://download.visualstudio.microsoft.com/download/pr/014120d7-d689-4305-befd-3cb711108212/0fd66638cde16859462a6243a4629a50/ndp48-x86-x64-allos-enu.exe - Visual C++ Redistributable Package for Visual Studio 2012 https://www.microsoft.com/download/details.aspx?id=30679 - Visual C++ Redistributable Package for Visual Studio 2013 https://support.microsoft.com/help/4032938/update-for-visual-c-2013-redistributable-package - IIS URL Rewrite Module https://www.iis.net/downloads/microsoft/url-rewrite - Unified Communications Managed API 4.0 https://www.microsoft.com/download/details.aspx?id=34992 - Required Windows components (reboot required) Install-WindowsFeature Server-Media-Foundation, NET-Framework-45-Features, RPC-over-HTTP-proxy, RSAT-Clustering, RSAT-Clustering-CmdInterface, RSAT-Clustering-Mgmt, RSAT-Clustering-PowerShell, 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, RSAT-DNS-Server -Restart 5.3 Prepare the Schema: ----------------------- - Extend the Schema .\Setup.exe /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF /PrepareSchema - Check the Schema Version (ms-Exch-Schema-Verision-Pt): # Replace "dc=netometer,dc=local" with your DC (Domain Component) repadmin /showattr * "CN=ms-Exch-Schema-Version-Pt,cn=schema,cn=configuration,dc=netometer,dc=local" /atts:rangeUpper # Exchange Forest (rangeUpper) # 2019 CU11 17003 # 2013 CU23 15312 - Introduce Exchange Org and prepare Root Domain: #Note: In a single-domain forest, this command will prepare the domain too .\Setup.exe /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF /PrepareAD /OrganizationName:NetoMeter - ONLY!!! in a multi-domain forest - prepare the rest of the domains: ----------------------------------------------------------------------- (which will contain Exchange servers or users) .\Setup.exe /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF /PrepareDomain #or you can prepare all domains simultaneously (must be Enterprise Admin): .\Setup.exe /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF /PrepareAllDomains - Check the msExchProductId value for the created Exchange organization object ---------------------------------------------------------- # Exchange Server build numbers and release dates https://docs.microsoft.com/en-us/exchange/new-features/build-numbers-and-release-dates?view=exchserver-2019 #Note: Replace "Your_Org", "Your_Domain" and "Your_Domain_Suffix" with the relevant data repadmin /showattr * "CN=NetoMeter,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=netometer,DC=local" /atts:msExchProductId 6. Install Exchange 2019 ------------------------ - Tail the ExchangeSetup.log c:; cd \ExchangeSetupLogs Get-Content ./ExchangeSetup.log -Wait -Tail 20 - Validate the installation Get-ExchangeServer | ft Name,Admin* Test-ServiceHealth -Server Ex2-19 7. Configure the Virtual Direcotories URL ----------------------------------------- - Check the current URL configuration Get-OutlookAnywhere -ADPropertiesOnly | fl Server,InternalHostName,ExternalHostName Get-OwaVirtualDirectory -ADPropertiesOnly | fl Server,InternalURL,ExternalURL Get-ECPVirtualDirectory -ADPropertiesOnly | fl Server,InternalURL,ExternalURL Get-OABVirtualDirectory -ADPropertiesOnly | fl Server,InternalURL,ExternalURL Get-WebServicesVirtualDirectory -ADPropertiesOnly | fl Server,InternalURL,ExternalURL Get-MAPIVirtualDirectory -ADPropertiesOnly | fl Server,InternalURL,ExternalURL Get-ActiveSyncVirtualDirectory -ADPropertiesOnly | fl Server,InternalURL,ExternalURL Get-PowerShellVirtualDirectory -ADPropertiesOnly | fl Server,InternalURL,ExternalURL Get-ClientAccessService | fl Identity,AutoDiscoverServiceInternalUri - Configure the vars for the URL $Ex13 = "Ex1-13.netometer.local" $Ex19 = "Ex2-19.netometer.local" $AutoName = "autodiscover.netometer.com" $OutlookName = "mail.netometer.com" $OWAName = "mail.netometer.com" $OABName = "mail.netometer.com" $WebSvcName = "mail.netometer.com" $MAPIName = "mail.netometer.com" $ASyncName = "mail.netometer.com" $PShellName = "mail.netometer.com" - Configure the Virtual Directories URL Get-ClientAccessService -Identity $Ex19 | Set-ClientAccessService -AutoDiscoverServiceInternalUri "https://$AutoName/Autodiscover/Autodiscover.xml" Get-OutlookAnywhere -Server $Ex19 | Set-OutlookAnywhere -InternalHostname $OutlookName -ExternalHostname $OutlookName -ExternalClientsRequireSsl $true -InternalClientsRequireSsl $true -InternalClientAuthenticationMethod NTLM -ExternalClientAuthenticationMethod Negotiate Get-OwaVirtualDirectory -Server $Ex19 | Set-OwaVirtualDirectory -ExternalUrl "https://$OWAName/owa" -InternalUrl "https://$OWAName/owa" Get-EcpVirtualDirectory -Server $Ex19 | Set-EcpVirtualDirectory -ExternalUrl "https://$OWAName/ecp" -InternalUrl "https://$OWAName/ecp" Get-OabVirtualDirectory -Server $Ex19 | Set-OabVirtualDirectory -ExternalUrl "https://$OABName/OAB" -InternalUrl "https://$OABName/OAB" Get-WebServicesVirtualDirectory -Server $Ex19 | Set-WebServicesVirtualDirectory -ExternalUrl "https://$WebSvcName/EWS/Exchange.asmx" -InternalUrl "https://$WebSvcName/EWS/Exchange.asmx" Get-MapiVirtualDirectory -Server $Ex19 | Set-MapiVirtualDirectory -ExternalUrl "https://$MAPIName/mapi" -InternalUrl "https://$MAPIName/mapi" Get-ActiveSyncVirtualDirectory -Server $Ex19 | Set-ActiveSyncVirtualDirectory -ExternalUrl "https://$ASyncName/Microsoft-Server-ActiveSync" -InternalUrl "https://$ASyncName/Microsoft-Server-ActiveSync" Get-PowerShellVirtualDirectory -Server $Ex19 | Set-PowerShellVirtualDirectory -ExternalUrl "https://$PShellName/powershell" -InternalUrl "https://$PShellName/powershell" 8. Import the trusted public certificate in Exchange 2019 and recycle the Exchange App pools -------------------------------------------------------------------------------------------- %windir%\system32\inetsrv\appcmd list wp /xml | %windir%\system32\inetsrv\appcmd recycle apppool /in Note: • The account which you use for Exchange 2019 Setup wizard must be a member of Schema Admins Domain Admins and Enterprise Admins (to be able to prepare AD and the domain) ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: http://www.netometer.com :: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::