Exchange-Administration mit PowerShell - Mail-Manipulation

Lesezeit
15 Minuten
Bis jetzt gelesen

Exchange-Administration mit PowerShell - Mail-Manipulation

02.07.2025 - 17:34
Veröffentlicht in:

Admins konfigurieren Exchange über das Exchange Admin Center und die Exchange-Management-Shell. Letztere ist dabei ein Werkzeug der PowerShell und dieser Workshop stellt im Detail vor, wie sich damit Postfächer verwalten lassen und Admins die Performance im Blick haben.

In Kürze

  • Die Exchange Management Shell (EMS) erweitert das Exchange Admin Center um leistungsfähige PowerShell-Cmdlets für die Administration und Automatisierung.
  • Mit Cmdlets wie Get-Mailbox, Set-Mailbox oder New-Mailbox verwalten Administratoren Postfächer effizient per Skript.
  • PowerShell vereinfacht die Überwachung von Exchange-Servern, Datenbanken, Mailfluss und Performance durch umfangreiche Diagnose- und Monitoringbefehle.
  • Auch Exchange Online lässt sich über das moderne ExchangeOnlineManagement-Modul sicher per PowerShell administrieren.
  • Durch Automatisierung und Massenbearbeitung reduziert die Exchange Management Shell den Verwaltungsaufwand in lokalen und hybriden Exchange-Umgebungen erheblich.

Das Exchange Admin Center (EAC) hat über die Jahre viele Verbesserungen erfahren, sodass es Admins heute als ausgereifte Administrationsoberfläche dient. Die EAC-Befehle werden dabei im Hintergrund über PowerShell-Cmdlets ausgeführt. Diese Kommandos können Sie auch direkt zur Administration über die Exchange-Management-Shell (EMS) nutzen. Die EMS ist auch in Exchange 2019 ein wichtiger Bestandteil der Administration und ergänzt nicht nur die grafische Oberfläche, sondern ist insgesamt ein mächtigeres Werkzeug. Die PowerShell eröffnet oft flexiblere und effizientere Wege, über die sich wesentlich mehr Eigenschaften anzeigen lassen als über die EAC. Darüber hinaus filtern und sortieren Sie so die Daten schneller.

Cover des IT-Adminstrator-Sonderhefts 01/2024 "PowerShell"

Dieser Artikel erschien im IT-Administrator Sonderheft I/2024

"PowerShell – Infrastrukturen automatisiert verwalten"

Das Sonderheft I/2024  liefert auf 205 Seiten praktisches Know-how zum Umgang mit der Microsoft-Skriptumgebung und deren Einsatz zur Automatisierung wichtiger Serversysteme. Das Autorenteam wirft unter anderem einen Blick auf die Methoden und Techniken, die die PowerShell für die Administration bereitstellt.

Bestellen Sie das Sonderheft hier als E-Paper
oder
hier als gedrucktes Heft.

Einstieg in die PowerShell für Exchange

Wie in der PowerShell üblich, verfügen fast alle Befehle über die vier Präfixe Get, Set, New und Remove, denen das erweiterte Kommando folgt. So erstellen Sie neue Mailboxen über das New-Mailbox-Cmdlet, zeigen sich über Get-Mailbox  Postfächer mit den Eigenschaften an, bearbeiten diese mit Set-Mailbox  und löschen sie mit Remove-Mailbox.

Bei einer Get-Abfrage erhalten Sie zunächst alle Eigenschaften eines Objektes zurück. Das Ergebnis lassen Sie sich über eine Format-Tabelle (Alias "ft") oder Format-Liste (Alias "fl") – getrennt mittels Pipe – als Tabelle oder Liste anzeigen. So erhalten Sie mit folgendem Befehl zum Beispiel alle Mailboxen samt deren Displaynamen, Datenbanken und der Organisationseinheiten:

Get-Mailbox |ft DisplayName, Database, OrganizationalUnit

Spezielle Eigenschaften fragen Sie über die Parameter direkt ab. Die Postfächer einer bestimmten Datenbank ermitteln Sie wie folgt:

Get-Mailbox -Database EXDB01

Welche Parameter eines Befehls zur Verfügung stehen, erfahren Sie mit "Strg+ Leertaste" nach dem Minuszeichen (Bild 1).

Bild 1: Das Get-Mailbox-Cmdlet zeigt die vorhandenen Postfächer an. Die erweiterten Parameter des Befehls bringt Strg+Leertaste zur Ansicht.
Bild 1: Das Get-Mailbox-Cmdlet zeigt die vorhandenen Postfächer an. Die erweiterten Parameter des Befehls bringt Strg+Leertaste zur Ansicht.

Sollte die Ausgabe einer Abfrage zu lang sein, hilft die Erweiterung "more" direkt hinter der Pipe bei der Ausgabe. Hierdurch erfolgt die Darstellung seitenweise und die Space-Taste dient dem Weiterblättern.

Die tabellarische Darstellung mittels "ft" optimieren Sie weiter mit den Parametern "Wrap" und "AutoSize". Wrap bricht die Ergebnisse einer Anzeigespalte bei großen Feldern um, sodass das Ergebnis mehrzeilig dargestellt wird. Der AutoSize-Parameter ermittelt die Spaltenbreiten anhand der tatsächlich angezeigten Daten, anstatt sie statisch vorzugegeben. Zur Weiterverarbeitung von Daten können Sie diese mittels Export-CSV  auch sehr einfach exportieren. Als Letztes sei noch auf die Erweiterung "Out-GridView" hingewiesen. Dabei wird der Befehls-Output in tabellarischer Form auf einer grafischen Oberfläche dargestellt, wodurch Sie das Ergebnis in der Oberfläche weiter filtern können.

Das Get-Command-Cmdlet listet Ihnen alle Befehle auf, die Ihnen zur Verfügung stehen. Über Platzhalter fragen Sie Cmd-lets einer Befehlsgruppe ab:

Get-Command *MailboxDatabase*

Die genaue Beschreibung eines Befehls erhalten Sie über Get-Help. Mit der Erweiterung "-Detailed" erhalten Sie zudem noch die Parameter und Beispiele für die Nutzung des Cmdlets:

Get-Help Get-MailboxDatabase -Detailed

Sollte es bei der Anzeige der Befehle über "Get-Help" Probleme geben, finden Sie eine ausführliche Beschreibung der PowerShell-Befehle links im Bereich "Reference". Beachten Sie, dass nicht alle davon mit allen Eigenschaften in Exchange Online beziehungsweise lokal verfügbar sind. So suchen Sie zum Beispiel Cmdlets zu Exchange-Servern oder Datenbanken in Exchange Online vergebens.

Sofern eine Abfrage nicht alle Elemente zeigen soll, lässt sich die Ausgabe über eine Wildcard direkt beschränken. Nur Postfächer mit einem bestimmten Namen erhalten Sie also beispielweise wie folgt:

Get-Mailbox *<Benutzer>*

Das gleiche Ergebnis erzielen Sie auch über einen Where-Filter:

Get-Mailbox | where DisplayName -match "<Benutzer>"

Eine andere Schreibweise mit geschweifter Klammer lässt auch die Verwendung verschiedener Bedingungen zu:

Get-Mailbox | where {$_.DisplayName -match "Chris" -and $_.Server-Name -eq "LABEX19"}

Eine Besonderheit stellt der Parameter "ANR" da. Er gibt eine Zeichenfolge an, für die eine Suche zur Auflösung eines nicht eindeutigen Namens (Ambiguous Name Resolution, ANR) erfolgen soll. Alle Personen mit dem Syntax "Chris", egal, ob im Namen, im Alias oder im DisplayName zu finden, fragen Sie wie folgt ab:

Get-Mailbox -Anr Chris 

Fernzugriff einrichten

Die Exchange-Management-Shell steht Ihnen auf einem Exchange-Server direkt zur Verfügung. Um von Ihrem Arbeitsplatz auf einen Exchange-2019-Server über die Remote PowerShell zuzugreifen, sind nur wenige Schritte nötig. Um den Zugriff zu ermöglichen, starten Sie die Windows PowerShell zunächst als Administrator. Weiter müssen Sie die Skriptausführungsrichtlinie auf "RemoteSigned" setzen:

Set-ExecutionPolicy RemoteSigned

Sind die Voraussetzungen gegeben, fragen Sie zunächst die Zugangsdaten ab:

$UserCredential = Get-Credential

Als Nächstes bereiten Sie die Session vor und geben das Ziel der Sitzung an:

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri    http://<ServerFQDN>/PowerShell/ -Credential $UserCredential

Der Syntax "ServerFQDN" entspricht dem Fully-Qualified Domain Name des Exchange-Servers, in unserem Beispiel "labex19.schulenburg.lab". Zum Schluss bauen Sie die Verbindung über

Import-PSSession $Session -DisableNameChecking 

auf. Es stehen Ihnen nun sämtliche Exchange-Befehle in der PowerShell-Sitzung zur Verfügung. Nach dem Ende der Arbeiten trennen Sie die Verbindung über Remove-PSSession $Session.

Unter Exchange kann standardmäßig jeder User auf die Remote-Shell zugreifen. Die Benutzer können sich aber nur in dem Rahmen bewegen, der ihnen über die rollenbasierte Zugriffssteuerung (Role Based Access Control, RBAC) zugewiesen ist. Den Zugriff deaktivieren Sie über das Attribut "RemotePowerShellEnabled" beim Set-User-Cmdlet:

Set-User <Benutzer> -RemotePower-ShellEnabled $false

War in den Anfängen von Exchange Online der Zugriff ebenfalls einfach über die Remote-PowerShell möglich, hat sich dies mit der Zeit geändert. Das "Exchange Online PowerShell V3"-Modul (abgekürzt als "Exo V3"-Modul) erlaubt einen wesentlich einfacheren und auch sichereren Zugriff über die Verwendung moderner Authentifizierung. Dieser Weg ist, nach dem Ende von "Exchange Online PowerShell V1" im Januar 2023 und von v2 im Juli 2023, die einzige Möglichkeit, um sich mit Exchange Online zu verbinden. Exo V3 bringt dabei noch einige neue Cmdlets für die Massenbearbeitung mit. Die Tabelle auf Seite 112 stellt die neuen und alten Befehle gegenüber, wobei die alten Cmdlets weiterhin verfügbar sind.

Um sich mit Exchange Online zu verbinden, starten Sie die PowerShell im privilegierten Modus und installieren zunächst das Management-Modul:

Install-Module -Name ExchangeOnlineManagement

Im Anschluss ist die Anmeldung unter Angabe eines Benutzers direkt möglich:

Connect-ExchangeOnline -UserPrincipalName <Benutzer>

Protokollierung der Befehle

Wie bereits angesprochen, werden die Befehle der EAC über PowerShell-Aufrufe umgesetzt. Dabei lässt sich über die Befehlszeilenprotokollierung nachvollziehen, welches PowerShell-Kommando zur aktuellen Aktion ausgeführt wurde. Aufrufen lässt sich die Befehlszeilenprotokollierung über die Hilfe. Die Anzeige erfolgt dabei in einem eigenen Fenster und Sie müssen dies beim Start der EAC aktivieren, damit Sie die PowerShell-Befehle nachvollziehen können. Das Protokoll speichert maximal 500 Zeilen und beginnt im Anschluss, die ältesten Einträge zu überschreiben. Leider referenziert das Protokoll auf die GUIDs der Exchange-Objekte, weshalb es schwierig sein kann, den richtigen Eintrag zu finden (Bild 2).

Bild 2: Die Befehlsprotokollierung in der EAC zeigt die PowerShell-Befehle zu den gerade ausgeführten Aktionen.
Bild 2: Die Befehlsprotokollierung in der EAC zeigt die PowerShell-Befehle zu den gerade ausgeführten Aktionen.

Eine richtige Überwachung ist hierdurch aber nicht gegeben. Exchange Online wie auch Exchange 2019 monitoren mit dem Administrator-Überwachungsprotokoll die Aktionen von Admins, die sowohl über das Exchange Administrator Center als auch über die Exchange-Management-Shell erfolgen. Dies bietet Organisationen die Möglichkeit, Änderungen an der Exchange-Umgebung nachzuvollziehen, sodass sie wissen, durch wen, was, wann geändert wurde. Es werden dabei nur Befehle protokolliert, die Objekte verändern, sodass Get- oder Search-Befehle nicht dabei sind. Ebenfalls gelangen keine fehlerhaft ausgeführten Befehle ins Protokoll. Die Protokollierung passen Sie bei Bedarf individuell an, dass sie nur bestimmte Befehle berücksichtigt. Exchange prüft beim Ausführen eines Kommandos, ob dieses oder speziell genutzte Parameter zu protokollieren sind und mit einem zu überwachenden Befehl übereinstimmt. Sofern dies der Fall ist, erfolgt eine Protokollierung in einen Systempostfach.

Verantwortlich für die Überwachung ist der Cmdlet-Extension-Agent "Admin Audit Log Agent". Konfigurationsanpassungen zur Überwachung werden grundsätzlich protokolliert, unabhängig davon, ob das Monitoring für den Befehl aktiv ist oder nicht. Die Konfiguration rufen Sie sich ausschließlich über die EMS und Get-AdminAuditLogConfig  auf. Welche Cmdlets mit welchen Parametern genau geloggt werden, ist in den Parametern "AdminAuditLogCmdlets" und "AdminAuditLogParameters" zu finden. Standardmäßig ist hier ein Asterisk (*) eingetragen, was sämtliche Befehle ins Proto- koll integriert.

 

Die Einträge im Log werden standardmäßig 90 Tage aufbewahrt und im Anschluss gelöscht. Sie verlängern den Zeitraum über den Parameter "AdminAudit- LogAgeLimit". Setzen Sie diesen auf "0", löschen Sie alle Einträge im Protokoll.

Die Protokollierung erfasst im Auslieferungszustand den Namen und die Parameter des Befehls, das veränderte Objekt, wer den Befehl auf welchem Server ausgeführt hat sowie den Ausführungszeitpunkt. Es wird aber nicht mitgeschrieben, was genau geändert wurde. Um dies ebenfalls zu überwachen, aktivieren Sie das erweiterte Logging über "Verbose" und dem Parameter" LogLevel":

Set-AdminAuditLogConfig -LogLevel verbose

Das Protokoll über die Befehle zeigen Sie sich in der EAC unter dem Punkt "Verwaltung der Compliance / Überwachung" an. Hier rufen Sie den Punkt "Administratorenüberwachungsprotokoll-Bericht ausführen" auf. Es öffnet sich ein Popup-Fenster, in dem Sie über einen Zeitraum nach ausgeführten Cmdlets suchen. Die EAC bietet Ihnen weiterhin über den Punkt "Administratorenüberwachungsprotokoll exportieren" an, sich eine Übersicht der Befehle als E-Mail mit XML-Anlage zuzusenden.

Als Alternative zur EAC kommt die EMS mit den New-AdminAuditLogSearch- oder Search-AdminAuditLog-Cmdlets zum Einsatz. Hier filtern Sie direkt nach Benutzern oder Befehlen, um eine schnelle Übersicht zu erhalten. Folgendes Beispiel liefert alle ausgeführten Befehle nach dem 1. November 2023 tabellarisch:

Search-AdminAuditLog -StartDate 11/01/2023 | ft RunDate, Caller, CmdletName, CmdletParameters, ObjectModified 
Bild 3: Den Status der Administrator-Überwachungsprotokollierung liefert die Exchange Management Shell und der Get-AdminAuditLogConfig-Befehl.
Bild 3: Den Status der Administrator-Überwachungsprotokollierung liefert die Exchange Management Shell und der Get-AdminAuditLogConfig-Befehl.

Verwaltung von Postfächern

Die Exchange-Postfächer sind meist Benutzerpostfächer, die Personen zugeordnet sind. Daneben kann diese Ressource aber auch beispielsweise für Besprechungsräume angelegt werden. Jedem Benutzerpostfach ist ein Active-Directory-Konto zugeordnet, das dem Anwender Zugriff auf das Postfach gibt, um E-Mail-Nachrichten senden und empfangen sowie Besprechungen und Termine erstellen zu können. Sprich, ein Postfach ist ein unverzichtbarer Bestandteil der Zusammenarbeit, der reibungslos funktionieren sollte.

Die Exchange-PowerShell bietet weit mehr Möglichkeiten zur Verwaltung von Postfächern als nur das Abrufen oder Setzen einfacher Eigenschaften. In diesem Abschnitt gehen wir tiefer auf diese Funktionen ein. Mit dem folgenden Code richten Sie zum Beispiel ein neues Postfach sehr schnell mit dem New-Mailbox-Cmdlet ein:

New-Mailbox -Name "Max Mustermann" -Alias "mmustermann" -Database "LABDB01" -OrganizationalUnit "CN=Users,DC=Schulenburg,DC=lab" -UserPrincipalName "mmustermann@schulenburg.lab" -FirstName "Max" -LastName "Mustermann" -Password (ConvertTo-SecureString -String "Passwort123!" -AsPlainText -Force)

Im Beispiel wird der Benutzer ebenfalls im Active Directory angelegt. Ist bereits ein User vorhanden, kann dieser über das Enable-Mailbox-Cmdlet für E-Mail aktiviert werden.

Um das angelegte Postfach in eine andere Postfachdatenbank zu verschieben, ist der folgende Aufruf zu nutzen. Dabei müssen Sie lediglich einen User und die zugehörige Zieldatenbank erzeugen:

New-MoveRequest -Identity "mmustermann@schulenburg.lab" -TargetDatabase "LABDB02"

Den Status einer Verschiebeaktion fragen Sie mit Get-MoveRequest  beziehungsweise Get-MoveRequestStatistics  ab.

Auch das Einrichten von Berechtigungen lässt sich über die PowerShell schnell realisieren. Dieses Beispiel gewährt einem anderen Benutzer Vollzugriff:

Add-MailboxPermission -Identity "mmustermann@schulenburg.lab" -User "Max" -AccessRights FullAccess

Über das Add-MailboxFolderPermis sion-Cmdlet lassen sich Rechte auch auf Ordnerebene festlegen.

Als Nächstes gehen wir kurz auf die Archivpostfächer ein. Die Nutzung des Exchange-Archives aktivieren Sie mit dem Enable-Mailbox-Befehl (das Deaktivieren erfolgt über Disable-Mailbox). Hierfür muss nur der Parameter "Archive" zum Einsatz kommen:

Enable-Mailbox -Identity "mmustermann@domain.com" -Archive

Als Letztes sei auf das Exportieren von Postfächern in PST-Dateien verwiesen. Sofern Sie über die entsprechenden Rechte verfügen, ist dies schnell durchgeführt:

New-MailboxExportRequest -Mailbox mmustermann -FilePath "\\Server\Share\mmustermann.pst"

Haben Sie sich bereits mit Get-Mailbox  einen Überblick über die Postfächer und deren Eigenschaften verschafft, fragen Sie die Details einer Mailbox mit Get-MailboxStatistics  ab. Als Rückmeldung erhalten Sie unter anderem die Anzahl der Elemente in dem Postfach sowie dessen Größe:

Get-MailboxStatistics Christian | ft DisplayName, ItemCount, TotalItemSize

Die Exchange-Management-Shell bietet eine umfangreiche Sammlung von Cmd-lets zur Verwaltung von Postfächern. Mit diesen können Administratoren effizient Postfächer erstellen, konfigurieren, migrieren und exportieren. Dieser Abschnitt hat Ihnen einen Überblick über die verschiedenen Befehle gegeben. Es lohnt sich, sich mit diesen vertraut zu machen, um die volle Kontrolle über die Exchange-Umgebung zu erlangen.

Bild 4: Postfächer lassen sich über die PowerShell bequem anlegen und auch zwischen Datenbanken verschieben.
Bild 4: Postfächer lassen sich über die PowerShell bequem anlegen und auch zwischen Datenbanken verschieben.

Überwachung des Serverstatus

Die Exchange-Management-Shell bietet nicht nur Werkzeuge zur Verwaltung von Postfächern und Konfigurationseinstellungen, sondern auch zur Überwachung und Diagnose von Exchange selbst. Diese Überwachungsfunktionen sind für Administratoren unerlässlich, um die Gesundheit und Leistung ihrer Exchange-Umgebung sicherzustellen. Eine Übersicht der Server in einer Organisation erhalten Sie über Get-ExchangeServer.  Um den Status von Exchange zu ermitteln, bietet sich zunächst die Überprüfung der Dienste mittels Test-ServiceHealth  an. Dieses Cmdlet zeigt an, welche erforderlichen Dienste auf dem Server laufen und welche nicht. Dies gibt einen schnellen Überblick über potenzielle Probleme. Sofern ein benötigter Dienst nicht gestartet ist, wird "RequiredServicesRunning" als "false" angezeigt. Die Abfrage kann für den lokalen, aber auch für entfernte Server zum Einsatz kommen.

Nicht gestartete Dienste erwecken Sie mit Start-Service  zum Leben, auf entfernten Exchange-Servern gelingt dies wie folgt:

Invoke-Command -ComputerName LAB-EX19 {Start-Service IISAdmin}

Informationen zum Status von Exchange selbst erhalten Sie über den Aufruf Get-HealthReport. Dies ist immer ein erster Ansatzpunkt bei der Fehlersuche und die Komponenten können die Status "Degraded", "Unhealthy", "Repairing", "Disabled", "Unavailable" und "UnInitialized" annehmen. Zum Anzeigen fehlerhafter Komponenten nutzen Sie:

Get-HealthReport LABEX19 | where {$_.alertvalue -ne "Healthy" -and $_.AlertValue -ne "Disabled"}

Etwas ausführlicher geht der Get-ServerHealth-Befehl auf die einzelnen Komponenten von Exchange ein. Da die Liste der Rückmeldungen sehr umfangreich ist, lohnt sich zunächst der Blick auf

Get-ServerHealth LABEX19 | where {$_.alertvalue -ne "Healthy" -and $_.AlertValue –ne "Disabled"}

Alternativ prüfen Sie direkt eine oder mehrere fehlerhafte Komponenten:

Get-ServerHealth LABEX19 -HealthSet Network | ft Name, HealthSetName, ServerComponentName, AlertValue -AutoSize

Ein weiterer wichtiger Aspekt ist die Überwachung des Status der Mailbox-Datenbanken in einer Database Availabilty Group (DAG), den Sie mittels Get-MailboxDatabaseCopyStatus  prüfen. Dies gibt Auskunft darüber, ob Datenbankkopien gesund sind, synchronisiert werden und ob sie aktiv oder passiv sind.

Hat eine Datenbank den Status "Failed" oder "FailedAndSuspended", sollten Sie etwas genauer hinschauen. So ergänzt das Test-ReplicationHealth-Cmdlet die Prüfung der DAG. Verwenden Sie das Cmd-let, um alle Aspekte von Replikation und Wiedergabestatus zu überprüfen und sich so einen vollständigen Überblick über die DAG zu verschaffen.

E-Mail-Warteschlangen sind ein weiterer kritischer Bereich, den es im Blick zu haben gilt. Mit Get-Queue | ft prüfen Sie deren Status. Dies zeigt alle Warteschlangen auf dem Server und Informationen über den jeweiligen Status. Der Test-Mailflow-Befehl überprüft die Mailflow-Konnektivität und schaut, ob aus dem Systempostfach eine Nachricht an einen Postfachserver übermittelt wird. Diese gibt erste Hinweise, ob der E-Mail-Fluss intern gestört oder verzögert ist.

Ein weiterer Aspekt, den Sie bei der Überwachung ebenfalls beachten sollten, ist die Performance. Mit der PowerShell können Sie auch auf Windows Performance Counter zugreifen, um verschiedene Aspekte der Exchange-Performance zu überwachen:

Get-Counter -Counter "\MSExchange MapiHttp Emsmdb\User Count"

Dies bringt die aktuelle Anzahl der MAPI-Nutzer zur Anzeige. Die OWA-Nutzer erreichen Sie über den Counter "MSExchange OWA\Current Unique Users". Eine Liste sämtlicher Sets lassen Sie sich mit folgendem Befehl ausgeben:

Get-Counter -ListSet * | Select CounterSetName, Description | Out-GridView

Die einzelnen Counter aus einem Set lesen Sie wiederum mit (Get-Counter -ListSet "MSExchange OWA").Paths  aus.

Die PowerShell bietet eine breite Palette von Überwachungs- und Diagnosewerkzeugen für Exchange-Administratoren. Durch regelmäßige Überwachung und schnelle Reaktion auf festgestellte Probleme stellen Sie sicher, dass Ihre Exchange-Umgebung reibungslos und effizient läuft. Es ist ratsam, regelmäßige Überwachungsskripte oder -aufgaben einzurichten, um proaktiv auf potenzielle Probleme zu reagieren.

Hier sei zum Abschluss noch auf das Skript "Exchange Server Health Checker"  verwiesen, das bei der Erkennung von häufigen Konfigurationsproblemen, die zu Leistungsengpässen und anderen, langanhaltenden Unanehmlichkeiten führen, hilft. Es listet dabei nützliche Informationen über den Server auf, um den Prozess der Informationssammlung über den Exchange-Server zu beschleunigen.

Bild 5: Das HealthChecker-Skript analysiert die Exchange-Konfiguration und listet die häufigsten Konfigurationsprobleme auf.
Bild 5: Das HealthChecker-Skript analysiert die Exchange-Konfiguration und listet die häufigsten Konfigurationsprobleme auf.

Exchange-Datenbanken verwalten

Exchange-Datenbanken sind das Herzstück der Umgebung und ihre effiziente Verwaltung ist entscheidend für eine reibungslose Kommunikation. Die PowerShell bietet eine leistungsstarke Schnittstelle für die Verwaltung dieser Datenbanken. Im Folgenden stellen wir Ihnen wichtige Befehle für diese Aufgabe vor.

Mit Get-MailboxDatabase  verschaffen Sie sich zunächst einen Überblick über alle vorhandenen Datenbanken und deren Status. Das Wichtigste dabei ist, ob eine Datenbank eingebunden ist oder nicht. Ist dies nicht der Fall, können Sie die Datenbank direkt in Exchange mounten:

Mount-Database -Identity "LABDB01"

Das Dismounten erfolgt entsprechend mit dem Dismount-Database-Cmdlet.

Wichtig sind dabei neben den Pfaden zu der Datenbank auch die Größe der DB, was sowohl die reine Dateigröße im Dateisystem als auch den freien Speicherplatz in der Datenbank umfasst. Diese Werte fragen Sie recht schnell mit folgendem Befehl ab:

Get-MailboxDatabase -Status| fl Name, DatabaseSize, AvailableNewMailboxSpace, *Path*

Wichtig ist dabei der Parameter "Status", damit die Größen auch angezeigt werden. Welche Postfächer sich in einer Datenbank befinden, listen Sie sich wie folgt auf:

Get-Mailbox -Database "LABDB01" | ft Name, WindowsEmailAddress

Größenbeschränkungen beim Transport im Blick

Exchange bietet verschiedene Optionen, mit denen Sie Größenbeschränkung für E-Mails konfigurieren. Die Limits lassen sich dabei sehr granular auf Postfach- oder Protokoll-Ebene einrichten. Um den Versand von und nach extern über die Connectoren zu regulieren, passen Sie deren Einstellungen an. Den aktuellen Status fragen Sie mit

Get-SendConnector | ft Name, MaxMessageSize und Get-ReceiveConnector | ft Name, MaxMessageSize 

ab. Standardmäßig liegt die Größenbeschränkung bei 35 beziehungsweise 36 MByte. Sie ändern diese Werte ebenfalls recht schnell, hier als Beispiel mit einem Limit von 50 MByte:

Get-SendConnector | Set-SendConnector -MaxMessageSize 50MB

Get-ReceiveConnector | Set-ReceiveConnector -MaxMessageSize 50MB

Daneben lassen sich noch die Organisationsbeschränkungen anpassen, die bei 10 MByte im Auslieferungszustand liegen. Sie überprüfen den aktuelles Status mit diesem Einzeiler:

Get-TransportConfig | fl MaxReceiveSize, MaxSendSize

Und ändern ihn etwa beispielsweise 50 MByte via:

Set-TransportConfig -MaxReceiveSize 50MB -MaxSendSize 50MB

Zudem sollten Sie noch die Beschränkungen der Postfächer im Auge haben, damit es an dieser Stelle keine Probleme gibt:

Set-Mailbox Christian -MaxSendSize 50MB -MaxReceiveSize 50MB

Beachten Sie bei der Konfiguration, dass die maximalen Werte für die Nachrichtengröße durch die Base64-Codierung circa 33 Prozent höher sein müssen als die tatsächlich nutzbare maximale Nachrichtengröße. Mit den oberen Befehlen kann der User Christian also nur etwa 33 MByte große E-Mails senden und empfangen. Sollten Sie Exchange Web Service (EWS), Outlook Web Access (OWA) oder ActiveSync nutzen, sind zusätzlich Anpassungen in der Webkonfiguration durchzuführen.

Planen Sie die Nachrichtengrößenbeschränkungen so, dass E-Mails möglichst früh in der Transport-Pipeline zurückgewiesen werden. An den Stellen, an denen Nachrichten in die Organisation eintreten, sollten die Beschränkungen möglichst restriktiv sein, damit Sie E-Mails aus dem Internet nicht erst annehmen, um sie im weiteren Verlauf abzulehnen. Benutzerbeschränkungen setzen die Begrenzungen für die Organisation innerhalb der Organisation außer Kraft, sodass Sie Gruppen definieren können, die untereinander größere E-Mails senden.

Neue Cmdlets im Exchange Online PowerShell V3-Modul (EXO V3)
Früheres Cmdlet Neues EXO-V3-Cmdlet
Get-CASMailbox Get-EXOCASMailbox
Get-Mailbox Get-EXOMailbox
Get-MailboxFolderPermission Get-EXOMailboxFolderPermission
Get-MailboxFolderStatistics Get-EXOMailboxFolderStatistics
Get-MailboxPermission Get-EXOMailboxPermission
Get-MailboxStatistics Get-EXOMailboxStatistics
Get-MobileDeviceStatistics Get-EXOMobileDeviceStatistics
Get-Recipient Get-EXORecipient
Get-RecipientPermission Get-EXORecipientPermission

Postfächer beschränken

Damit die Postfächer nicht unkontrolliert anwachsen, ist es wichtig, entsprechende Beschränkungen zu definieren. Auf diesem Weg planen Sie indirekt das Wachstum der Datenbanken und Sie können ein unkontrolliertes Ansteigen der Postfachgröße verhindern. Definieren Sie immer eine Maximalgrenze, damit das Datenbanklaufwerk nicht vollläuft, auch wenn es Ihnen utopisch vorkommt. Nichts ist schlimmer als ein volllaufendes Postfach durch eine Mailschleife, die Exchange gegebenenfalls nicht erkennt. Die Einstellungen fragen Sie zunächst an der Mailbox. Über das Attribut "UseDatabaseQuotaDefaults" definieren Sie dabei, ob der Datenbankstandard genutzt wird:

Get-Mailbox Christian |ft IssueWarningQuota, ProhibitSendQuota, ProhibitSendReceiveQuota, UseDatabaseQuotaDefaults -AutoSize

Um die Limits entsprechend anzupassen, gehen Sie so vor:

Set-Mailbox -Identity Christian -IssueWarningQuota 30GB -ProhibitSendQuota 40GB -ProhibitSendReceiveQuota 50GB -UseDatabaseQuotaDefaults $false 

Standardmäßig werden die Einstellungen der Datenbank übernommen, die bei Auslieferung bei einer maximalen Postfachgröße von 2 GByte liegen. Die Konfiguration über die Datenbank ist die zweite Stelle, an der Sie Grenzwerte für die Postfachgrößen definieren. Sie fragen die Parameter über diesen Befehl ab:

Get-MailboxDatabase LABDB01|ft IssueWarningQuota, ProhibitSendQuota, ProhibitSendReceiveQuota -AutoSize

Das folgende Beispiel listet Ihnen die Einstellungen aller Mailboxen einer Exchange-Datenbank auf, die nicht die Standardvorgaben nutzen. Auf diesem Weg bekommen Sie schnell Klarheit, wer die Einstellungen der Datenbank nutzt und bei wem individuelle Grenzwerte definiert sind:

Get-Mailbox -Database LABDB01 |Where UseDatabaseQuotaDefaults -eq $false | ft Name, IssueWarningQuota, ProhibitSendQuota, ProhibitSendReceiveQuota

Sofern Sie unterschiedliche Limits benötigen, fassen Sie die Mailboxen in eigenen Datenbanken zusammen, damit Sie die Rechte nicht an jedem Postfach explizit setzen müssen.

Bild 6: Die Postfachbegrenzungen werden individuell am Postfach oder zentral in der Datenbank konfiguriert.
Bild 6: Die Postfachbegrenzungen werden individuell am Postfach oder zentral in der Datenbank konfiguriert.

Definieren Sie nicht nur die Grenzen, sondern beschreiben Sie auch, wie die Mitarbeiter beim Erreichen der Grenzen handeln sollen. Sie sollten unbedingt vermeiden, Mitarbeiter in eine Schatten-IT zu zwingen. Denn schneller als Sie denken, werden E-Mail-Ablagen in Netzlaufwerken geschaffen oder durch die Nutzung von PST-Files dem Echtsystem entrissen.

Fazit

Insgesamt bietet die Exchange-Management-Shell eine flexible und leistungsstarke Umgebung für Administratoren, um Exchange-Server effizient zu verwalten, zu automatisieren und zu überwachen. Die Exchange Management Shell ist für die Administration tägliche Anlaufstelle und wir haben Ihnen einige wichtige Aspekte nähergebracht, damit das Auslesen und Konfigurieren zukünftig etwas zügiger vonstattengehen.

FAQs

Die Exchange Management Shell (EMS) ist die PowerShell-basierte Verwaltungsoberfläche von Microsoft Exchange. Sie ermöglicht Administratoren die Konfiguration von Postfächern, Datenbanken, Berechtigungen, Transportregeln und Servereinstellungen über leistungsfähige Cmdlets.

Das Exchange Admin Center eignet sich hervorragend für Standardaufgaben. Mit PowerShell lassen sich jedoch wesentlich umfangreichere Abfragen, Massenänderungen und Automatisierungen durchführen. Viele Verwaltungsaufgaben können dadurch deutlich schneller erledigt werden.

Zu den wichtigsten Cmdlets gehören Get-Mailbox, New-Mailbox, Set-Mailbox, Enable-Mailbox, Disable-Mailbox, Get-MailboxStatistics und New-MoveRequest. Damit lassen sich Postfächer erstellen, konfigurieren, verschieben und überwachen.

Ja. Exchange Server unterstützt den Remotezugriff über PowerShell-Sitzungen. Für Exchange Online wird das Modul ExchangeOnlineManagement verwendet, das eine sichere Anmeldung mit moderner Authentifizierung ermöglicht.

PowerShell eignet sich hervorragend für Massenänderungen. Über Filter, die Pipeline oder den Import von CSV-Dateien können Administratoren zahlreiche Postfächer gleichzeitig konfigurieren, verschieben oder Berechtigungen vergeben.

Cmdlets wie Get-HealthReport, Get-ServerHealth, Test-ServiceHealth, Get-Queue oder Test-Mailflow unterstützen Administratoren bei der Überwachung von Serverstatus, Mailfluss, Datenbankreplikation und der allgemeinen Systemgesundheit.

Ja. Exchange verfügt über ein Administrator-Überwachungsprotokoll (Admin Audit Log), das Änderungen dokumentiert, die über die Exchange Management Shell oder das Exchange Admin Center vorgenommen wurden. Dadurch lassen sich Konfigurationsänderungen nachvollziehen.

PowerShell ist auch in Exchange Online unverzichtbar. Viele erweiterte Verwaltungsaufgaben und Massenänderungen lassen sich ausschließlich oder deutlich effizienter über das ExchangeOnlineManagement-Modul durchführen.

Ja. Administratoren können Datenbanken mounten oder dismounten, deren Größe überwachen, Datenbankkopien kontrollieren sowie Verschiebevorgänge und Replikationen per PowerShell verwalten.

Die Exchange Management Shell richtet sich an Administratoren von Exchange Server und Exchange Online. Besonders in größeren oder hybriden Umgebungen erleichtert sie die Automatisierung, Standardisierung und Überwachung komplexer Verwaltungsaufgaben erheblich.

Hier geht es zur Themenseite