Exchange Sever 2019 Installation

Aus bknowledgebase
Zur Navigation springen Zur Suche springen

Einleitung[Bearbeiten]

Ich gehe hier von einer Neuinstallation aus und von der Installation auf Windows Server 2016. Bein Installation auf z.B. Server 2012 R2 müssen teilweise andere Features installiert werden. Weiterhin gehe ich davon aus, dass der User unter dem die Installation ausgeführt wird, mit maximalen Rechten ausgestattet ist, man benötigt z.B. unbedingt Schema-Master-Rechte usf.


Tipp vorweg[Bearbeiten]

Ich finde es deutlich angenehmer mit der PowerShell ISE zu arbeiten. Sobald Exchange installiert ist kann man auch diese für die Exchange Verwaltungsaufgaben nutzen (anstelle der Exchange Shell) indem man sie einfach startet und folgendes eingibt:

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn; 


Prerequisites[Bearbeiten]

Feste IP[Bearbeiten]

Get-NetIPAddress

Je nach Ergebnis -InterfaceIndex ändern ->

New-NetIPAddress -InterfaceIndex 2 -IPAddress 192.168.23.32 -PrefixLength 22 -DefaultGateway 192.168.23.100


Software herunterladen[Bearbeiten]

Folgende Software zunächst NUR herunterladen und erst später in der Angegebenen Reihenfolge dieser Anleitung installieren. (s.u.)

Sonst kann es zu Fehlern während der Installationsprozesse kommen.


Exchange Server 2019 (public Preview)

Invoke-WebRequest https://download.microsoft.com/download/5/0/E/50E18CDC-E86D-40D3-9C0D-D9655CB1C238/ExchangeServer2019-x64.iso -OutFile c:\Temp\exchange2019.iso


.NET Framework 4.8 offline installer

Invoke-WebRequest "https://download.visualstudio.microsoft.com/download/pr/014120d7-d689-4305-befd-3cb711108212/0fd66638cde16859462a6243a4629a50/ndp48-x86-x64-allos-enu.exe" -OutFile c:\Temp\net4.8.exe


Unified Communications Managed API 4.0 Runtime"

Invoke-WebRequest https://download.microsoft.com/download/D/F/F/DFFB3570-3264-4E01-BB9B-0EFDA4F9354F/UcmaRuntimeSetup.exe -OutFile c:\Temp\uni.exe

Visual C++ Redistributable Packages für Visual Studio 2012

Invoke-WebRequest "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe" -OutFile C:\Temp\redist2012.exe

Visual C++ Redistributable Packages für Visual Studio 2013

Invoke-WebRequest "https://download.microsoft.com/download/3/8/7/387A0F10-C0C1-4C74-82A9-4BB741342366/vcredist_x64.exe" -OutFile C:\Temp\redist2013.exe

Installation[Bearbeiten]

Rollen/Feature Installation[Bearbeiten]

Zunächst müssen nach Anleitung von Microsoft folgende Features installiert werden.


Bei Server mit GUI:

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

Bei Server Core:

Install-WindowsFeature Server-Media-Foundation, NET-Framework-45-Features, RPC-over-HTTP-proxy, RSAT-Clustering, RSAT-Clustering-CmdInterface, 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-Metabase, Web-Mgmt-Service, Web-Net-Ext45, Web-Request-Monitor, Web-Server, Web-Stat-Compression, Web-Static-Content, Web-Windows-Auth, Web-WMI, RSAT-ADDS

.NET 4.8, Unified Communications Managed API 4.0 Runtime und Visual C++ Redistributable Packages für Visual Studio 2013 Installieren[Bearbeiten]

'.NET 4.8

C:\Users\<username>\Downloads\net4.8.exe

CUA

C:\Users\<username>\Downloads\uni.exe

Visual Studio Redist

c:\users\<username\redist.exe


Active Directory vorbereiten[Bearbeiten]

Installations ISO Mounten

Mount-DiskImage <pfad_zum_exchange_2019.iso>
cd e:


Schema vorbereiten:

./setup.exe /PrepareSchema /IAcceptExchangeServerLicenseTerms

AD vorbereiten:

./setup.exe /PrepareAD /IAcceptExchangeServerLicenseTerms /on:<domainame>

Domain vorbereiten:

./setup.exe /PrepareDomain /IAcceptExchangeServerLicenseTerms


in genau dieser Reihenfolge.

Exchange Server installieren[Bearbeiten]

./setup.exe 

Diese Installation per Script[Bearbeiten]

Hier das Ganze zusammengefasst als Script. Es kann der parameter "tempverzeichnis" mitgegeben werden um anzugeben wohin die downloads gehen. Dann klappt das auch mit dem Nachbarn :)

Allerdings macht das Ganze nur Bedingt am Ende Sinn. Bei mir konnte ich schon viel Zeit so sparen. Aber um das wirklich zu automatisieren müsste noch einiges mehr an Aufwand betrieben werden. z.B. ist während der "PrepareShema Prepare ad usf" befehle ein neustart des servers notwendig und dann läuft das script nicht an der gleichen stelle weiter. Das müsste noch eingebaut werden. Wenn ich dazu komme nehme ich diesen Kommentar wieder raus.


Media:InstallExchange.7z


Das kann natürlich auch im Hintergrund ausgeführt werden. Dazu vllt. später mehr. Dann hat man mit den hier gelisteten Befehlen im Prinzip schon die komplette automatische Installation auf einem Server mit fester IP, der einer Domain hinzugefügt wurde und an dem man mit Domain Admin/Schema Admin angemeldet ist.

Weitere/Optionale Konfigurationen[Bearbeiten]

Am beten man geht einmal folgende Doku von Microsoft durch: https://docs.microsoft.com/en-us/exchange/plan-and-deploy/post-installation-tasks/post-installation-tasks?view=exchserver-2019

Hier trotzdem einige weitere Empfehlungen wie es weiter gehen könnte:

Datenbanken auf Separate Festplatte verschieben[Bearbeiten]

Die Datenbanken sollten auf separaten Platten liegen. Rein technisch ist das zwar heutzutage nicht mehr unbedingt notwendig (stichwort software defines Storage usf.) aber ich empfehle es trotzdem noch, da es in den meisten Fällen nicht schadet und vor allem 3 Vorteile bringt.

1. Übersichtlichkeit. Die Trennung der Daten in Logische Einheiten und die
1.1 flexiblen Möglichkeiten die dies bietet sind praktisch. Z.B. das verschieben ebenjener (virtuellen) Platte auf ein anderes Storage usf. 
2. Backups. Auf diese Weise können auch Backups besser über Systemteile gesteuert werden. Also z.B. Nur die Datenbank 01 sichern oder wiederherstellen ist sehr einfach und übersichtlich wenn man eigene virtuelle Disks verwendet
3. Sollten die Transactionlogs immer noch separiert gehalten werden, da vollgelaufene Laufwerke immer noch bei vielen Unternehmen vorkommen, die On-Premise arbeiten und bei denen Exchange nicht ordentlich konfiguriert ist oder wieder 
zerkonfiguriert wurde :)


Am besten macht man das mit folgendem Befehl:

Get-MailboxDatabase -Server <Servername> | Set-MailboxDatabase -Name <gewünschterDBName>
Move-DatabasePath MBXDB01 -EdbFilePath e:\DB01\DB01.edb -LogFolderPath e:\DB01

Hier beispielhaft den Datenbanknamen der ersten Datenbank direkt ändern und dann dorthin schieben wo es hin soll. Außerdem die Angabe für die speicherung der Logs. Hier empfehlen viele sogar eigene Laufwerke für die Logs usf. aber das führt hier zu weit.

Sendeconnector(en) anpassen[Bearbeiten]

NOT YET IMPLEMENTED

Virtuelle Verzeichnisse Anpassen[Bearbeiten]

In diesem Beispiel soll alle Kommunikation über die URLs "firma-mail.domain.de" laufen, da am Ende ein Cluster aus 3 Server stehen soll, die alle via Loadbalancing etc. auf diese Domainanfragen reagieren sollen, ergo ->

Get-OwaVirtualDirectory -Server <hostname> | Set-OwaVirtualDirectory -internalurl "https://mail.firma.de/owa" -externalurl "https://mail.firma.de/owa" -Confirm:$false
Get-EcpVirtualDirectory -server <hostname> | Set-EcpVirtualDirectory -internalurl "https://mail.firma.de/ecp" -externalurl "https://mail.firma.de/ecp"  -Confirm:$false
Get-WebServicesVirtualDirectory -server <hostname> | Set-WebServicesVirtualDirectory -internalurl "https://mail.firma.de/EWS/Exchange.asmx" -externalurl "https://mail.firma.de/EWS/Exchange.asmx"  -Confirm:$false
Get-ActiveSyncVirtualDirectory -Server <hostname> |Set-ActiveSyncVirtualDirectory -internalurl "https://mail.firma.de/Microsoft-Server-ActiveSync" -externalurl "https://mail.firma.de/Microsoft-Server-ActiveSync"  - Confirm:$false
Get-OabVirtualDirectory -Server <hostname> | Set-OabVirtualDirectory -internalurl "https://mail.firma.de/OAB" -externalurl "https:/mail.firma.de/OAB"  -Confirm:$false
Get-MapiVirtualDirectory -Server <hostname> | Set-MapiVirtualDirectory -externalurl "https://mail.firma.de/mapi" -internalurl "https://mail.firma.de/mapi"  -Confirm:$false

In diesem Fall sind die internal/external URIs aber gleich, damit Split-DNS gearbeitet wird. Diese können sich potentiell aber auch unterscheiden.

HINWEIS: Im Gegensatz zu dein meisten anderen Anleitungen lasse ich:

Set-OutlookAnywhere -externalhostname <Hostname> -internalhostname <Hostname> -ExternalClientsRequireSsl:$true -InternalClientsRequireSsl:$true -ExternalClientAuthenticationMethod 'Negotiate' -Confirm:$false
Set-ClientAccessService -AutoDiscoverServiceInternalUri <https://<hostname>/autodiscover> -Confirm:$false

erstmal weg. Da es sehr auf die letztendliche Implementierung ankommt, welche Angaben hier gemacht werden müssen.

Virtuelle Verzeichnisse anzeigen[Bearbeiten]

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

SSL/TLS Zertifikate austauschen[Bearbeiten]

NOT YET IMPLEMENTED

Wichtige Empfehlung bei Einsatz von Cluster/DAG[Bearbeiten]

Ich empfehle außerdem jedem der bereits weiß, dass er/sie den Exchange Server im Clusterverbund einer DAG betreiben will, schon ganz am Anfang selbst die Rolle "failover-cluster" manuell installiert und einmal das "cluster-validation Tool" im Failover Cluster manager nutzt um zu überprüfen ob alles Ordnungsgemäß funtioniert.

So kann man sich viel Mühe sparen, weil man sonst größere Probleme erst zu einem späteren Zeitpunkt entdeckt und ggf. alles wieder von vorn anfangen muss. Außerdem Supported Microsoft auch nur Systeme bei denen die Validierung Fehlerfrei ist.