Da ich gerade eine Migration eines Exchange Server 2013 auf 2019 bei einem Kundensystem durchführe, schreibe ich hier gleich eine Anleitung dazu.

Begonnen wird mit dem Exchange Server 2013.
Hier wird als erstes die aktuellste CU installiert.
Diese ist bei Microsoft frei zum Download verfügbar. Das Update beinhaltet eine Downtime, dies muss geplant sein.
Dann kann das Setup einfach ausgeführt werden. Dabei einfach das Setup durchklicken und warten.. das kann dauern. (Snapshot nicht vergessen)

Nun installieren wir wie bei einer Neuinstallation einen Exchange Server 2019 auf einem Windows Server 2019:

Exchange Server vorbereitungen

Installation mit dem Setup

Nach der Installation können wir nun die Konfiguration starten.

Als erstes beginnen wir den Datenbanknamen zu ändern.

get-mailboxdatabase -Server SRV-EXCH19 | Set-MailboxDatabase -Name DB19

nun verschieben wir die Logs auf eine eigene Partition
(bei einer Migration ist hier eine größere Partition zu empfehlen da beim migrieren viele Logs geschrieben werden und die Partition schnell voll läuft)

Move-DatabasePath DB19 -LogFolderPath E:\Logs

Wer möchte kann die Datenbank auch auf eine eigene Partition legen

Move-DatabasePath DB19 -EdbFilePath F:\DB\DB19.edb

Damit der neue Exchange auch Mails versenden kann, müssen wir diesen beim Sendeconnector hinzufügen:

Sendeconnector hinzufügen

Nun wechseln wir zum Reiter Server -> Datenbanken:

Grenzwerte

Diese werde müssen in beiden Datenbanken übereinstimmen.
Sicherlich ist hier unlimited nicht optimal. Da dies aber schon im alten Exchange eingestellt ist bleibt mir wohl keine Wahl.

Nun passen wir noch die virtuellen Verzeichnisse an:

Hierzu verwenden wir ein Skript das und die Pfade vom alten EX ausließt und übernimmt(das Skript kann sowohl für den Exchange 13 als auch 16 verwendet werden) Dies muss in der Exchange Shell ausgeführt werden:

$Exchange2019Server = "Exchange2019"
$Exchange2016Server = "Exchange2016"

#Get URLs from Exchange 2016 Server
$autodiscoverhostname = (Get-ClientAccessService $Exchange2016Server).AutoDiscoverServiceInternalUri
$owainturl = (Get-OwaVirtualDirectory -Server $Exchange2016Server).internalurl
$owaexturl = (Get-OwaVirtualDirectory -Server $Exchange2016Server).externalurl
$ecpinturl = (Get-EcpVirtualDirectory -server $Exchange2016Server).internalurl
$ecpexturl = (Get-EcpVirtualDirectory -server $Exchange2016Server).externalurl
$ewsinturl = (Get-WebServicesVirtualDirectory -Server $Exchange2016Server).internalurl
$ewsexturl = (Get-WebServicesVirtualDirectory -Server $Exchange2016Server).externalurl
$easinturl = (Get-ActiveSyncVirtualDirectory -Server $Exchange2016Server).internalurl
$easexturl = (Get-ActiveSyncVirtualDirectory -Server $Exchange2016Server).externalurl
$oabinturl = (Get-OabVirtualDirectory -server $Exchange2016Server).internalurl
$oabexturl = (Get-OabVirtualDirectory -server $Exchange2016Server).externalurl
$mapiinturl = (Get-MapiVirtualDirectory -server $Exchange2016Server).internalurl
$mapiexturl = (Get-MapiVirtualDirectory -server $Exchange2016Server).externalurl
$OutlAnyInt = (Get-OutlookAnywhere -Server $Exchange2016Server).internalhostname
$OutlAnyExt = (Get-OutlookAnywhere -Server $Exchange2016Server).externalhostname

#Configure Exchange 2019 Server
Get-OwaVirtualDirectory -Server $Exchange2019Server | Set-OwaVirtualDirectory -internalurl $owainturl -externalurl $owaexturl -Confirm:$false
Get-EcpVirtualDirectory -server $Exchange2019Server | Set-EcpVirtualDirectory -internalurl $ecpinturl -externalurl $ecpexturl -Confirm:$false
Get-WebServicesVirtualDirectory -server $Exchange2019Server | Set-WebServicesVirtualDirectory -internalurl $ewsinturl -externalurl $ewsexturl -Confirm:$false
Get-ActiveSyncVirtualDirectory -Server $Exchange2019Server | Set-ActiveSyncVirtualDirectory -internalurl $easinturl -externalurl $easexturl -Confirm:$false
Get-OabVirtualDirectory -Server $Exchange2019Server | Set-OabVirtualDirectory -internalurl $oabinturl -externalurl $oabexturl -Confirm:$false
Get-MapiVirtualDirectory -Server $Exchange2019Server | Set-MapiVirtualDirectory -externalurl $mapiexturl -internalurl $mapiinturl -Confirm:$false
Get-OutlookAnywhere -Server $Exchange2019Server | Set-OutlookAnywhere -externalhostname $OutlAnyExt -internalhostname $OutlAnyInt -ExternalClientsRequireSsl:$true -InternalClientsRequireSsl:$true -ExternalClientAuthenticationMethod 'Negotiate' -Confirm:$false
Get-ClientAccessService $Exchange2019Server | Set-ClientAccessService -AutoDiscoverServiceInternalUri $autodiscoverhostname -Confirm:$false

#Display setttings
Get-OwaVirtualDirectory | fl server,externalurl,internalurl
Get-EcpVirtualDirectory | fl server,externalurl,internalurl
Get-WebServicesVirtualDirectory | fl server,externalurl,internalurl
Get-ActiveSyncVirtualDirectory | fl server,externalurl,internalurl
Get-OabVirtualDirectory | fl server,externalurl,internalurl
Get-MapiVirtualDirectory | fl server,externalurl,internalurl
Get-OutlookAnywhere | fl servername,ExternalHostname,InternalHostname
Get-ClientAccessService | fl name,AutoDiscoverServiceInternalUri

Je Nach Zertifikat muss dies auch auf den neuen Exchange übernommen werden.
Hier für muss dies am alten Exchange exportiert und am neuen importiert werden.

Nun passen wir die DNS Einträge an, damit diese auf den neuen Exchange zeigen.
Die Portfreigaben dürfen wir auch nicht vergessen.

Puh, wieder was geschafft.
Jetzt können wir endlich die Postfächer migrieren, aber nicht zu voreilig.
Erst kommen die Systempostfächer dran.

Mal schauen was wir für Systempostfächer haben

erst brauchen wir den Namen der alten DB:

get-mailboxdatabase

Datenbanken

jetzt lassen wir uns die Systempostfächer der alten DB anzeigen:

get-mailbox -Database "Mailbox Database 1626922216" -Arbitration

Diese müssen jetzt in die neue DB migriert werden:

get-mailbox -Database "Mailbox Database 1626922216" -Arbitration | new-moverequest -TargetDatabase DB19

Nun Startet die Migration. Mit folgendem Befehl prüfen wir den Status:

 get-moverequest

moverequest

Nachdem wir auch das abgeschlossen haben. Können wir endlich die Benutzerpostfächer migrieren.
Dafür gibt es zwei Wege, entweder über die Shell oder alternativ über die ECP.
Ich verwende lieber die Shell, da dies schneller geht.

Lassen wir uns erst mal alle Postfächer anzeigen:

get-mailbox -Database "Mailbox Database 1626922216"

Je nachdem wie viele User im System sind ist es ratsam die Migration in Häppchen durchzuführen, da viele Logs geschrieben werden und wir ein voll laufen der Partition vermeiden wollen. Das gibt sonst extra Arbeit.|