Exchange Server 2016 – CU21 Probleme nach Update

Nach dem Update auf CU21 und Deinstalliertem Virenscanner, traten folgende Probleme auf:

Fehler 1

Scheinbar wurden einige dll´s für Transport Agents nicht mehr gefunden und daher konnte der Exchange Transport Dienst nicht gestartet werden.

Mir folgendem Befehl können die Transport Agents auslesen lesen:

Get-TransportAgent

Hier wurden dann 2 veraltete Transport Agents gefunden, die gelöscht werden müssen:

Get-TransportAgent "ESET Filtering Agent" | Uninstall-Transport Agent

Nachdem beide Transport Agents gelöscht waren, konnte der Exchange Transport Dienst wieder normal gestartet werden.

Fehler 2

Der IIS, bzw. die Standardwebseite, konnte nicht gestartet werden. Folgende Fehlermeldung erschien:

Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird

Scheinbar wird Port 80 / 443 von einem anderen Prozess bereits benutzt. Mit folgendem Befehl kann man sich alle Dienste anzeigen lassen, welche die Ports verwendet.

netstat –anb | select-string –Context 1 –Simplematch ":80"

Wie man hier erkennen kann, blockiert die „tomcat9.exe“ den Port 80. Also habe ich den Tomcat Dienst auf „Deaktiviert2“ gesetzt. Welchen Zweck auch immer dieser auf einem Exchange hatte.

Exchange Server 2010 – 2016 PowerShell Cmdlets

In den nächsten Tagen werde ich die Liste der interessanten Exchange Server 2010 – 2016 Powershell Cmdlets immer erweitern.

Ich habe hier eine Liste der interessantesten Exchange Server 2010 – 2016 PowerShell Cmdlets erstellt, beschrieben und mit Screenshots belegt.

Get-ExchangeServerAccessLicense

Es wird eine Tabelle mit den Lizenzen der Server und der Cals angezeigt.

Get-ExchangeServer

Es wird eine Liste der Exchange Server der Organisation generiert.

Get-HealthReport
Get-ServerHealth

Mit diesem Befehl lässt sich der Zustand der Exchange Umgebung analysieren.

Beispiele:

  • Get-HealthReport -Server ServerName
  • Get-HealthReport -GroupSize
  • Get-HealthReport -HealthSet
  • Get-ServerHealth -Server Servername

Get-PartnerApplication

Ab Exchange Server 2010 können Partner Aplikationen genutzt werden, die mit diesem Befehl ausgegeben werden. Beispiel: Lync Online, Sharepoint, Office Web Apps Server, …

Get-MobileDevice

Mit diesem Befehl wird eine Liste mit allen angebundenen Smartphones / Tablets / Computers per Active Sync generiert.

Redirect-Message -UrsprungsServer - ZielServer

Dieser Befehl zieht Nachrichten von einer Server Queue zu einem anderen Server um. Wenn es Probleme mit einem Server gibt, können so E-Mails dennoch zugestellt werden.

Get-ExchangeServer|ft Name,Edition,AdminDisplayVersion

Der Befehl generiert eine Tabelle aller Exchange Server mit deren Version. Diese kann man dann mit der unten stehenden Tabelle abgleichen und so das Patchlevel herausfinden.

Exchange 2010 Version
Microsoft Exchange Server 2010 14.00.0639.021
Microsoft Exchange Server 2010 RU1 14.00.0682.1
Microsoft Exchange Server 2010 RU2 14.00.0689.0
Microsoft Exchange Server 2010 RU3 14.00.0694.0
Microsoft Exchange Server 2010 RU4 14.00.0702.1
Microsoft Exchange Server 2010 RU5 14.00.0726.000
Microsoft Exchange Server 2010 SP1 14.01.0218.015
Microsoft Exchange Server 2010 SP1 RU1 14.01.0255.02
Microsoft Exchange Server 2010 SP1 RU2 14.01.0270.001
Microsoft Exchange Server 2010 SP1 RU3 14.01.0289.003
Microsoft Exchange Server 2010 SP1 RU3 v2 14.01.0289.00?
Microsoft Exchange Server 2010 SP1 RU3 v3 14.01.0289.007
Microsoft Exchange Server 2010 SP1 RU4 14.01.0323.001
Microsoft Exchange Server 2010 SP1 RU4 v2 14.01.0323.006
Microsoft Exchange Server 2010 SP1 RU5 14.01.0339.001
Microsoft Exchange Server 2010 SP1 RU6 14.01.0355.002
Microsoft Exchange Server 2010 SP1 RU7 14.01.0421.000
Microsoft Exchange Server 2010 SP1 RU7 v2 14.01.0421.002
Microsoft Exchange Server 2010 SP1 RU7 v3 14.01.0421.003
Microsoft Exchange Server 2010 SP1 RU8 14.01.0438.000
Microsoft Exchange Server 2010 SP2 14.02.0247.005
Microsoft Exchange Server 2010 SP2 RU1 14.02.0283.003
Microsoft Exchange Server 2010 SP2 RU2 14.02.0298.004
Microsoft Exchange Server 2010 SP2 RU3 14.02.0309.002
Microsoft Exchange Server 2010 SP2 RU4 14.02.0318.002
Microsoft Exchange Server 2010 SP2 RU4 v2 14.02.0318.004
Microsoft Exchange Server 2010 SP2 RU5 14.02.0328.005
Microsoft Exchange Server 2010 SP2 RU5 v2 14.02.0328.010
Microsoft Exchange Server 2010 SP2 RU6 14.02.0342.003
Microsoft Exchange Server 2010 SP3 14.03.0123.004
Microsoft Exchange Server 2010 SP3 RU1 14.03.0146.000
Microsoft Exchange Server 2010 SP3 RU2 14.03.0158.001
Microsoft Exchange Server 2010 SP3 RU3 14.03.0169.001
Microsoft Exchange Server 2010 SP3 RU4 14.03.174.001
Microsoft Exchange Server 2010 SP3 RU5 14.03.181.006
Microsoft Exchange Server 2010 SP3 RU6 14.03.195.001
Microsoft Exchange Server 2010 SP3 RU7 14.03.210.002
Microsoft Exchange Server 2010 SP3 RU8 14.03.224.001
Microsoft Exchange Server 2010 SP3 RU8 v2 14.03.224.002
Microsoft Exchange Server 2010 SP3 RU9 14.03.235.001
Microsoft Exchange Server 2010 SP3 RU10 14.03.0248.002
Microsoft Exchange Server 2010 SP3 RU11 14.03.0266.001
Microsoft Exchange Server 2010 SP3 RU12 14.03.0279.002
Microsoft Exchange Server 2010 SP3 RU13 14.03.0294.000
Microsoft Exchange Server 2010 SP3 RU14 14.03.0301.000
Microsoft Exchange Server 2010 SP3 RU15 14.03.0319.002
Microsoft Exchange Server 2010 SP3 RU16 14.03.0339.000
Microsoft Exchange Server 2010 SP3 RU17 14.03.0352.000
Microsoft Exchange Server 2010 SP3 RU18 14.03.0361.001
Exchange 2013 Version
Microsoft Exchange Server 2013 Preview 15.00.0466.013
Microsoft Exchange Server 2013 RTM 15.00.0516.032
Microsoft Exchange Server 2013 CU1 15.00.0620.029
Microsoft Exchange Server 2013 CU2 15.00.0712.022
Microsoft Exchange Server 2013 CU2 v2 15.00.0712.024
Microsoft Exchange Server 2013 CU3 15.00.0775.038
Microsoft Exchange Server 2013 SP1 (CU4) 15.00.0847.032
Microsoft Exchange Server 2013 CU5 15.00.0913.022
Microsoft Exchange Server 2013 CU6 15.00.0995.029
Microsoft Exchange Server 2013 CU7 15.00.1044.025
Microsoft Exchange Server 2013 CU8 15.00.1076.009
Microsoft Exchange Server 2013 CU9 15.00.1104.005
Microsoft Exchange Server 2013 CU10 15.00.1130.007
Microsoft Exchange Server 2013 CU11 15.00.1156.006
Microsoft Exchange Server 2013 CU12 15.00.1178.004
Microsoft Exchange Server 2013 CU13 15.00.1210.003
Microsoft Exchange Server 2013 CU14 15.00.1236.003
Microsoft Exchange Server 2013 CU15 15.00.1263.005
Microsoft Exchange Server 2013 CU16 15.00.1293.002
Microsoft Exchange Server 2013 CU17 15.00.1320.004
Microsoft Exchange Server 2013 CU18 15.00.1347.002
Exchange 2016 Version
Microsoft Exchange Server 2016 Preview 15.01.0225.017
Microsoft Exchange Server 2016 RTM 15.01.0225.042
Microsoft Exchange Server 2016 CU1 15.01.0396.030
Microsoft Exchange Server 2016 CU2 15.01.0466.034
Microsoft Exchange Server 2016 CU3 15.01.0544.027
Microsoft Exchange Server 2016 CU4 15.01.0669.032
Microsoft Exchange Server 2016 CU5 15.01.0845.034
Microsoft Exchange Server 2016 CU6 15.01.1034.026
Microsoft Exchange Server 2016 CU7 15.01.1261.035

Exchange / IIS Log-Dateien regelmäßig löschen

Die Exchange Server und IIS Log-Dateien nehmen sehr schnell extreme Größen an. Daher ist es sinnvoll diese regelmäßig zu löschen. Hierfür habe ich ein Script geschrieben, dass alle Log-Dateien löscht, die älter als 3 Tage sind.

Get-ChildItem -Path "C:\Program Files\Microsoft\Exchange Server\V15\Logging" -Recurse *.log -force  | where {$_.lastwritetime -lt (get-date).adddays(-3)} | Remove-Item -force
Get-ChildItem -Path "C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs" -Recurse *.log -force  | where {$_.lastwritetime -lt (get-date).adddays(-3)} | Remove-Item -force
Get-ChildItem -Path "E:\Logs IIS" -Recurse *.log -force  | where {$_.lastwritetime -lt (get-date).adddays(-3)} | Remove-Item -force

Die erste beiden Zeilen geben den Pfad und das Dateialter für die Exchange 2013 Log-Dateien an. Die dritte Zeile tut das gleiche für die ISS Log-Dateien, die bei mir in einem benutzerdefinierten Pfad liegen.

Dieses Script kann man dann täglich mit dem Aufgabenplaner ausführen und somit den Speicherplatz für Log-Dateien minimal halten.

Exchange Server 2003 – Migration der Adresslisten auf Exchange 2010

Damit die Exchange Adresslisten kompatibel mit der neuen Exchange Server Version sind, müssen die Recipient Filter angepasst werden:

Alle Benutzer

Set-AddressList “Alle Benutzer” –IncludedRecipients MailboxUsers

v

Alle Gruppen

Set-AddressList “Alle Gruppen” –IncludedRecipients Mailgroups

Alle Kontakte

Set-AddressList “Alle Kontakte” –IncludedRecipients MailContacts

Globale Standardadressliste

Set-GlobalAddressList "Globale Standardadressliste" -RecipientFilter {(Alias -ne $null -and (ObjectClass -eq 'user' -or ObjectClass -eq 'contact' -or ObjectClass -eq 'msExchSystemMailbox' -or ObjectClass -eq 'msExchDynamicDistributionList' -or ObjectClass -eq 'group' -or ObjectClass -eq 'publicFolder'))}

Öffentliche Ordner Adressliste

Folgende Befehl, der in vielen Anleitungen vorkommt, funktioniert nicht:

Set-AddressList -Name “Public Folder” -RecipientFilter {(RecipientType -eq ‘PublicFolder’)} 

Stattdessen sollte dieser Befehl verwendet werden:

Set-AddressList "Öffentliche Ordner" -RecipientFilter {Alias -ne $null -and ObjectCategory -like 'publicFolder'}

Exchange Server 2003 – Migration der Hub-Transport Rolle auf Exchange 2010

Bei einer Exchange Server 2003 Migratione auf Exchange Server 2010 gab es Probleme bei der Migration der Hub-Transport Rolle. Daher nehme ich das zum Anlass eine Anleitung zu schreiben.

Routing Group Connector

Wenn die Exchange Server 2010 Installation feststellt das eine alte Exchange 2003 Organisation existiert, wird automatisch ein Routing Group Connector erstellt, der das Routing der E-Mails zwischen den verschiedenen Exchange Server Versionen ermöglicht. Sollte dies nicht automatisch geschehen, kann dies wie folgt gemacht werden:

New-RoutingGroupConnector -Name "Migrations Connector" -SourceTransportServers "exchange2003.contoso.com" -TargetTransportServers "exchange2010.contoso.com" -Cost 10 -Bidirectional $true

Mit diesem Befehl werden zwei Connectoren erstellt. Dies geschieht durch den Paramter „BiDirectional“. Einmal in die eine und einmal in die andere Richtung.

Empfangs Connector

Damit die Exchange 2003 Organisation E-Mails über den eben erstellten Routing Group Connector senden kann, muss ein passender Empfangs Connector erstellt werden. Dieser wird bvei der Installation automatisch angelegt. Es sollte ein zusätzlicher Connector erstellt werden, der die IP Adresse der alten Exchange Server 2003 beinhaltet und das Recht „Anonym“ erhält.

New-ReceiveConnector -Name "Exchange 2003" -Usage Custom -PermissionGroups AnonymousUsers -Bindings "IP des Exchange 2010 Servers:25" -RemoteIpRanges "Exchange Server 2003 IP"

Probleme beim Routing von Exchange 2003 zu Exchange 2010

Wenn die Warteschlagen zum Exchange 2010 Server nicht abgearbeitet werden, sollte überprüft werden, ob der virtuelle SMPT-Connector einen globalen Smarthost benutzt:

exchange 2003 v smtp smart host

Hier sollte nichts konfiguriert sein. Danach sollte das Routing funktionieren.

Öffentliche Ordner migrieren

Um die Öffentlichen Ordner auf einen neuen Server zu verschieben, bzw. die Replikate auf den neuen Servern zusätzlich vorzuhalten, kann man die Exchange Scripte benutzen. Diese liegen auf C:\Program Files\Microsoft\Exchange Server\V14\Scripts

Öffentliche Ordner – Replikationen hinzufügen

Um einen neuen Server zusätzlich zu den alten Servern in der Replikation einzutragen:

Öffentliche Ordner

.\AddReplicaToPFRecursive.ps1 -TopPublicFolder "\" -ServerToAdd "Neuer Exchange Server"

System Ordner

.\AddReplicaToPFRecursive.ps1 -TopPublicFolder "\NON_IPM_Subtree" -ServerToAdd "Neuer Exchange Server"

Öffentliche Ordner – Replikationen verschieben

Um die Repplikationen auf den neuen Server zu verschieben und von dem alten Server zu entfernen:

.\MoveAllReplicas.ps1 -Server "Alter Server" -NewServer "Neuer Exchange Server"

Active Directory – Adressliste generieren

Mit der Powershell kann man sehr einfach, auf Grundlage des Active Directorys, eine Adressliste des Unternehmens generieren. Im folgendem Beispiel werden die Spalten Name, Abteilung, Telefonnummer, Mobiltelefonnummer und E-Mail Adresse ausgelesen, die Mitarbeiter nach Namen sortiert und anschließend als CSV exportiert.

Powershell Beispiel

get-aduser -SearchBase 'ou=Mitarbeiter,Dc=domain,DC=local' -filter 'objectClass -eq "user"' -Properties * | Sort-Object surname | Select-Object name, department, officephone, mobilephone, emailaddress | Export-Csv adressliste.csv

Ergebnis

Active Directory - Adressliste export

Exchange Server 2013 – MAPI over HTTP aktivieren

MAPI over HTTP wurde mit Exchange Server 2013 Service Pack 1 eingeführt und benötigt mindestens Outlook 2013 Service Pack 1.

  • Keine Bindung an RPC
  • Bei Verbindungsabbruch oder Netzwerkwechsel schnellere Reconnects, da nur die HTTP-Verbindung wiederhergestellt werden muss
  • Besseres Handlich für Firewalls und Loadbalancer
  • Einfacheres Troubleshooting
  • Höhere Auslastung auf Client Access Servern

MAPI over HTTP aktivieren

MAPI over HTTP ist standardmäßig deaktiviert und muss erst konfiguriert und aktiviert werden:

MAPI over HTTP Virtual Directory konfigurieren

Damit MAPI over HTTP per Autodiscover konfiguriert werden kann, muss das Virtuelle Directory konfiguriert werden:

Get-MapiVirtualDirectory | Set-MapiVirtualDirectory -InternalUrl https://mail.domain.local/mapi –ExternalUrl https://mail.domain.de/mapi -IISAuthenticationMethods NTLM,Negotiate

MAPI over HTTP aktivieren

Nun kann MAPI over HTTP in der gesamten Exchange Organisation aktiviert werden. Dies geschieht mit folgendem Befehl:

Set-OrganizationConfig -MapiHttpEnabled $true

IIS Reset

Zum Schluss muss noch der IIS auf jedem Exchange Server neugestartet werden:

issreset

Erste Verbdingung mit MAPI over HTTP

Bis die Outlook 2013 Clients mit Service Pack 1 diese Konfigurationsänderung mitbekommen, kann ca. 30 Minuten dauern. Danach erscheint folgende Meldung:

Exchange 2013 MAPI over HTTP 2

Nun kann man in den Verbindungseigeschaften das verwendete Protokoll überprüfen:

Exchange 2013 MAPI over HTTP 1

Wenn hier „HTTP“ steht, hat es geklappt.

MAPI over HTTP testen

Mit folgendem Befehl kann MAPI over HTTP getestet werden:

Test-OutlookConnectivity -ProbeIdentity OutlookMapiHttpSelfTestProbe

MAPI over HTTP Logging

In folgenden Verzeichnissen werden die Logs abgelegt:

%ExchangeInstallPath%Logging\MAPI Address Book Service\
%ExchangeInstallPath%Logging\MAPI Client Access\
%ExchangeInstallPath%Logging\HttpProxy\Mapi\

MAPI over HTTP in Outlook 2013 deaktivieren

MAPI over HTTP wird automatisch per Autodiscover aktiviert. Es kann aber in der Registry deaktiviert werden:

HKCU\Software\Microsoft\Exchange\MapiHttpDisabled (DWORD) = 1

Exchange Server 2013 – Performance Counter Fehler beheben

Während der Installation von Exchange Server 2013, sollten eigentlich alle nötigen Performance Counter regestriert werden. Dies schlägt meistens fehl und von nun an wird das Eventlog mit Fehler geflutet.

Beispiel einer Meldung

Fehler beim Aktualisieren eines Leistungsindikators. Der Indikatorname lautet 'Delay Time Threshold', der Kategoriename ist 'MSExchange User WorkloadManager'. Optionaler Code: 3. Ausnahme: The exception thrown is : System.InvalidOperationException: Die Instanz "rca" ist bereits mit einer dem Prozess entsprechenden Lebensdauer vorhanden. Sie kann erst erneut erstellt oder verwendet werden, wenn sie entfernt wurde, oder der Prozess, der sie verwendet, beendet wurde.
   bei System.Diagnostics.SharedPerformanceCounter.FindInstance(Int32 instanceNameHashCode, String instanceName, CategoryEntry* categoryPointer, InstanceEntry** returnInstancePointerReference, Boolean activateUnusedInstances, PerformanceCounterInstanceLifetime lifetime, Boolean& foundFreeInstance)
   bei System.Diagnostics.SharedPerformanceCounter.GetCounter(String counterName, String instanceName, Boolean enableReuse, PerformanceCounterInstanceLifetime lifetime)
   bei System.Diagnostics.SharedPerformanceCounter..ctor(String catName, String counterName, String instanceName, PerformanceCounterInstanceLifetime lifetime)
   bei System.Diagnostics.PerformanceCounter.InitializeImpl()
   bei System.Diagnostics.PerformanceCounter.set_RawValue(Int64 value)
   bei Microsoft.Exchange.Diagnostics.ExPerformanceCounter.set_RawValue(Int64 value)
Last worker process info : System.ArgumentException: Es wird kein Prozess mit der ID 3180 ausgeführt.
   bei System.Diagnostics.Process.GetProcessById(Int32 processId)
   bei Microsoft.Exchange.Diagnostics.ExPerformanceCounter.GetLastWorkerProcessInfo()
Processes running while Performance counter failed to update: 
5524 w3wp
3356 MonitoringHost
2172 svchost
4 System
396 csrss
0 Idle
..................
Performance Counters Layout information: A process is holding onto a transport performance counter. processId : 3952, counter : average task wait time Value=1 SpinLock=0 Lifetime=Type: 1 ProcessId: 3952 StartupTime: 130431896595313549, currentInstance : owa(B875F7C) RefCount=0 SpinLock=0 Offset=3216, categoryName: MSExchange User WorkloadManager 
A process is holding onto a transport performance counter. processId : 784, counter : average task wait time Value=1 SpinLock=0 Lifetime=Type: 1 ProcessId: 784 StartupTime: 130432298547223973, currentInstance : ews(B8724E4) RefCount=1 SpinLock=0 Offset=2408, categoryName: MSExchange User WorkloadManager 
A process is holding onto a transport performance counter. processId : 16260, counter : average task wait time Value=10 SpinLock=0 Lifetime=Type: 1 ProcessId: 16260 StartupTime: 130432298608633345, currentInstance : eas(B8721B2) RefCount=1 SpinLock=0 Offset=1600, categoryName: MSExchange User WorkloadManager 
A process is holding onto a transport performance counter. processId : 4172, counter : average task wait time Value=1 SpinLock=0 Lifetime=Type: 1 ProcessId: 4172 StartupTime: 130431896723907291, currentInstance : rca(B878B35) RefCount=1 SpinLock=0 Offset=32, categoryName: MSExchange User WorkloadManager 

Exchange 2013 - Performance Counters 1

Performance Counter erneut regestrieren

Um die Fehler zu beheben, müssen die Performance Counter erneut regestriert werden. Diese befinden sich im Exchange Server 2013 Installations Verzeichnis im Order „Setup/Perf“.

Powershell Snapin laden

Damit alle nötigen Cmdlets vorhanden sind, muss folgendes Snapin geladen werden:

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Setup

Exchange 2013 - Performance Counters 2

Performance Counter regestrieren

Nun kann folgender Befehl ausgeführt werden, um die Performance Counter erneut zu regestrieren,

Get-ChildItem "Exchange_Installation\Setup\Perf" | Where-Object {$_.Name -match ".xml"} | Foreach {New-PerfCounters -DefinitionFileName $_.FullName}

Exchange 2013 - Performance Counters 3

Der Fehler bei einem Performance Counter ist normal, wenn die Installationsdateien von Exchange Server Service Pack 1 benutzt werden. Damit sollten die Eventlog Fehler behoben sein.

Reverse-Proxy – Exchange Server & Lync Server

Nach dem offiziellem aus für das Threat Mangement Gateway 2010 war lange Zeit nicht klar, wie die Veröffentlichung der Exchange & Lync Webdiensten geandhabt werden soll. Nun gibt es sogar zwei kostenlose Möglichkeiten:

  • IIS mit ARR und URL Rewrite
  • Windows Server 2012 mit Web Application Proxy

IIS mit ARR und URL Rewrite

Eine einfache und auch gute Möglichkeit für die Veröffentlichung ist die Proxy-Funktion im IIS, mit den Zusatzkomponenten Application Request Routing und URL Rewrite Modul. Die Installation kann sogar mit dem Web-Plattform Installer gemacht werden, so dass nicht ein Setup ausgeführt werden muss. Die Komponenten müssen dann nur noch konfiguriert werden.

lync_2013_topology(1)

Die Exchange Server 2013 Entwickler haben dazu ein gutes Tutorial erstellt:

Ich habe sehr gute Erfahrungen mit dieser Technik und kann diese Art der Veröffentlichung nur empfehlen. Unsere Exchange Server 2013 / Lync Server 2013 werden hierüber veröffentlicht und dies funktioniert absolut problemlos.

Windows Server 2012 R2 WAP

Zur Web Application Proxy Rolle im Windows Server 2012 R2 gibt es noch nicht so viele Informationen und Erfahrungeberichte. Auf jeden Fall soll auch diese Veröffentlichungsmethode eine gute Alternative zum TMG 2010 darstellen.