Defender deaktivieren

Damit die Exchange Installation etwas schneller durchläuft, sollte während der Installation der Windows Defender abgeschaltet werden. Nach der Exchange Installation wird der Windows Defender wieder eingeschaltet. Falls ein anderer Virenscanner auf dem Server im Einsatz ist, sollte dieser ebenfalls deaktiviert werden.

Unter einem Core-Server geht das mit der PowerShell:

Set-MpPreference -DisableRealtimeMonitoring $true
Set-MpPreference -MAPSReporting 0

Voraussetzungen 

Benötigte Komponenten installieren

Bevor Exchange Server installiert werden kann, müssen einige Voraussetzungen installiert werden, zunächst sind dies Windows Features, welche einfach mit der PowerShell installiert werden können:

Desktop

Install-WindowsFeature Server-Media-Foundation, NET-Framework-45-Core, NET-Framework-45-ASPNET, NET-WCF-HTTP-Activation45, NET-WCF-Pipe-Activation45, NET-WCF-TCP-Activation45, NET-WCF-TCP-PortSharing45, 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

Core

Install-WindowsFeature Server-Media-Foundation, NET-Framework-45-Core, NET-Framework-45-ASPNET, NET-WCF-HTTP-Activation45, NET-WCF-Pipe-Activation45, NET-WCF-TCP-Activation45, NET-WCF-TCP-PortSharing45, 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

Benötige Software unabhängig von Core oder Desktop

Auslagerungsdatei

Die Größe der Auslagerungsdatei sollte 25% vom Arbeitsspeicher betragen.

Bei 20GB (20480 MB) =  20480/100*25 = 5120MB

GUI

Core

Diese kann auch über die Kommandozeile geändert werden

wmic computersystem where name="%computername%" set AutomaticManagedPagefile=False
wmic computersystem where name="%computername%" set AutomaticManagedPagefile=False

Energieplan

GUI

Core

powercfg /list
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
powercfg /getactivescheme

Exchange-Setup

Nach einem Neustart kann das Exchange-Setup gestartet werden. Es wird empfohlen, den Exchange auf dem D-Laufwerk zu installieren:

mkdir "D:\Program Files\Microsoft\Exchange Server\V15"

Was das Setup gerade macht bzw. wo es hängt, kann mit folgendem PowerShell-Befehl verfolgt werden:

Get-Content "C:\ExchangeSetupLogs\ExchangeSetup.log" -Tail 10 -Wait

Aktuelles SU installieren

Exchange Server build numbers and release dates | Microsoft Learn

Datenbank umbenennen & verschieben

Get-MailboxDatabase -Server $env:computername | Set-MailboxDatabase -Name MBXDB01
Move-DatabasePath MBXDB01 -EdbFilePath E:\MBXDB01\MBXDB01.edb -LogFolderPath E:\MBXDB01

Defender einschalten und anpassen

Da der Defender zu Beginn der Installation abgeschaltet wurde, ist es jetzt an der Zeit den Defender zu konfigurieren und wieder zu aktivieren. Dazu kann das Script „Get-Exchange2016AVExclusions.ps1“ von Paul Cunningham runtergeladen und auf dem Exchange Server gespeichert werden:

Der PowerShell-Script muss wie folgt in der Exchange-Verwaltungsshell ausgeführt werden:

.\Get-Exchange2016AVExclusions.ps1 -ConfigureWindowsDefender

URLs der virtuellen Verzeichnisse ändern

Die hinterlegten URLs müssen für den Exchange-Server auflösbar sein!

$servername = "EX01"
$internalhostname = "outlook."
$externalhostname = "outlook."
$autodiscoverhostname = "autodiscover."
$owainturl = "https://" + "$internalhostname" + "/owa"
$owaexturl = "https://" + "$externalhostname" + "/owa"
$ecpinturl = "https://" + "$internalhostname" + "/ecp"
$ecpexturl = "https://" + "$externalhostname" + "/ecp"
$ewsinturl = "https://" + "$internalhostname" + "/EWS/Exchange.asmx"
$ewsexturl = "https://" + "$externalhostname" + "/EWS/Exchange.asmx"
$easinturl = "https://" + "$internalhostname" + "/Microsoft-Server-ActiveSync"
$easexturl = "https://" + "$externalhostname" + "/Microsoft-Server-ActiveSync"
$oabinturl = "https://" + "$internalhostname" + "/OAB"
$oabexturl = "https://" + "$externalhostname" + "/OAB"
$mapiinturl = "https://" + "$internalhostname" + "/mapi"
$mapiexturl = "https://" + "$externalhostname" + "/mapi"
$aduri = "https://" + "$autodiscoverhostname" + "/Autodiscover/Autodiscover.xml"
Get-OwaVirtualDirectory -Server $servername | Set-OwaVirtualDirectory -internalurl $owainturl -externalurl $owaexturl -Confirm:$false
Get-EcpVirtualDirectory -server $servername | Set-EcpVirtualDirectory -internalurl $ecpinturl -externalurl $ecpexturl -Confirm:$false
Get-WebServicesVirtualDirectory -server $servername | Set-WebServicesVirtualDirectory -internalurl $ewsinturl -externalurl $ewsexturl -Confirm:$false
Get-ActiveSyncVirtualDirectory -Server $servername | Set-ActiveSyncVirtualDirectory -internalurl $easinturl -externalurl $easexturl -Confirm:$false
Get-OabVirtualDirectory -Server $servername | Set-OabVirtualDirectory -internalurl $oabinturl -externalurl $oabexturl -Confirm:$false
Get-MapiVirtualDirectory -Server $servername | Set-MapiVirtualDirectory -externalurl $mapiexturl -internalurl $mapiinturl -Confirm:$false
Get-OutlookAnywhere -Server $servername | Set-OutlookAnywhere -externalhostname $externalhostname -internalhostname $internalhostname -ExternalClientsRequireSsl:$true -InternalClientsRequireSsl:$true -ExternalClientAuthenticationMethod 'Negotiate'  -Confirm:$false
Get-ClientAccessService $servername | Set-ClientAccessService -AutoDiscoverServiceInternalUri $aduri -Confirm:$false
Get-OwaVirtualDirectory -Server $servername | fl server,externalurl,internalurl
Get-EcpVirtualDirectory -server $servername | fl server,externalurl,internalurl
Get-WebServicesVirtualDirectory -server $servername | fl server,externalurl,internalurl
Get-ActiveSyncVirtualDirectory -Server $servername | fl server,externalurl,internalurl
Get-OabVirtualDirectory -Server $servername | fl server,externalurl,internalurl
Get-MapiVirtualDirectory -Server $servername | fl server,externalurl,internalurl
Get-OutlookAnywhere -Server $servername | fl servername,ExternalHostname,InternalHostname
Get-ClientAccessService $servername | fl name,AutoDiscoverServiceInternalUri