Microsoft Exchange Server 2019 Exchange Management Shell – wichtige PowerShell-Befehle für Administratoren
Exchange Management Shell Befehle für Exchange Server 2019: Mail Queue prüfen, Message Tracking, Mailumleitung, PST Export, Adresslisten, GAL, Transportregeln, Connectoren, Berechtigungen, Datenbanken, Zertifikate und tägliche Exchange Administration.
Wichtiger Hinweis zu Exchange Server 2019
Exchange Server 2019 hat am 14. Oktober 2025 das Supportende erreicht. Dieser Artikel ist daher eine Praxisreferenz für bestehende Exchange-2019-Umgebungen und keine Empfehlung für neue Installationen. Für weiter zu betreibende On-Premises-Umgebungen sollte Exchange Server Subscription Edition beziehungsweise eine Migration zu Microsoft 365 geprüft werden.
Exchange Management Shell öffnen
Die Exchange Management Shell stellt die Exchange-Cmdlets bereit. Viele Beispiele hier gelten ausdrücklich für Exchange Server on-premises; Exchange Online verwendet teilweise andere Cmdlets, Parameter und Verbindungsmodelle.
Grundbefehle
`Get-ExchangeServer` listet Exchange-Server. `Get-ExchangeServer | Format-List Name,Edition,AdminDisplayVersion` liefert eine schnelle Versionsübersicht. Mit `Get-Command *-Mailbox*`, `Get-Help <Cmdlet> -Full` und `Get-Help <Cmdlet> -Examples` findet man verfügbare Befehle und Beispiele.
Get-ExchangeServer
Get-ExchangeServer | Format-List Name,Edition,AdminDisplayVersion
Get-Command *-Mailbox*
Get-Help Get-Mailbox -Examples
Mail Queue prüfen
`Get-Queue` ist einer der wichtigsten ersten Befehle bei Mailflussproblemen. Er zeigt Warteschlangen, Status, Nachrichtenzahl und NextHop. Mit `Get-Queue -Server EX01` lässt sich ein bestimmter Transportserver prüfen.
Get-Queue
Get-Queue -Server EX01
Get-Queue | Sort MessageCount -Descending
Get-Queue -Filter "Status -eq 'Retry'"
Nachrichten in einer Queue untersuchen
Mit `Get-Message -Queue EX01\123` werden Nachrichten einer Queue angezeigt. Für gezielte Suchen können Filter verwendet werden, beispielsweise `Get-Message -Server EX01 -Filter "FromAddress -eq 'sender@example.org'"`.
Get-Message -Queue EX01\123
Get-Message -Server EX01 -Filter "FromAddress -eq 'sender@example.org'"
Queues und Nachrichten verwalten
`Suspend-Queue` pausiert eine Queue, `Resume-Queue` setzt sie fort. Für einzelne Nachrichten gibt es unter anderem `Suspend-Message`, `Resume-Message` und `Remove-Message`. Vor destruktiven Aktionen immer zuerst Queue und Nachricht eindeutig prüfen.
Suspend-Queue -Identity EX01\123
Resume-Queue -Identity EX01\123
Suspend-Message -Identity EX01\123\456
Resume-Message -Identity EX01\123\456
Remove-Message -Identity EX01\123\456 -WithNDR $false
Message Tracking
`Get-MessageTrackingLog` ist das zentrale Werkzeug für die Nachrichtenverfolgung. Suche möglichst mit Zeitfenster sowie Absender, Empfänger, Betreff oder Message-ID. Beispiel: `Get-MessageTrackingLog -Start (Get-Date).AddHours(-4) -End (Get-Date) -Sender user@example.org`.
$start=(Get-Date).AddHours(-4)
$end=Get-Date
Get-MessageTrackingLog -Start $start -End $end -Sender user@example.org
Get-MessageTrackingLog -Start $start -End $end -Recipients recipient@example.org -MessageSubject "Test"
Message Tracking lesbar ausgeben
Mit `Select` und `Format-Table` wird die Ausgabe übersichtlich: `Get-MessageTrackingLog ... | Select Timestamp,EventId,Source,Sender,Recipients,MessageSubject,MessageId | Format-Table -AutoSize`. Ergebnisse können mit `Export-Csv` gespeichert werden.
Get-MessageTrackingLog -Start (Get-Date).AddHours(-4) -End (Get-Date) |
Select Timestamp,EventId,Source,Sender,Recipients,MessageSubject,MessageId |
Format-Table -AutoSize
Mailboxen suchen und anzeigen
`Get-Mailbox`, `Get-Mailbox -Identity user@example.org`, `Get-Mailbox -ResultSize Unlimited`, `Get-Recipient` und `Get-Mailbox -Filter` gehören zum täglichen Werkzeugkasten.
Mailboxen anlegen und entfernen
Je nach Szenario sind `New-Mailbox`, `Disable-Mailbox`, `Connect-Mailbox`, `Remove-Mailbox` und `Set-Mailbox` relevant. Vor destruktiven Befehlen immer Identität und Sicherungsstatus prüfen.
Mailumleitung hinterlegen
Für Weiterleitungen stehen `-ForwardingAddress` und `-ForwardingSmtpAddress` zur Verfügung. Mit `-DeliverToMailboxAndForward $true` bleibt die Nachricht im ursprünglichen Postfach und wird zusätzlich weitergeleitet. Beispiel: `Set-Mailbox user -ForwardingSmtpAddress 'smtp:target@example.net' -DeliverToMailboxAndForward $true`. Externe automatische Weiterleitungen sollten aus Sicherheits- und Compliance-Gründen bewusst kontrolliert werden.
Set-Mailbox user -ForwardingSmtpAddress 'smtp:target@example.net' -DeliverToMailboxAndForward $true
Get-Mailbox user | Format-List ForwardingAddress,ForwardingSmtpAddress,DeliverToMailboxAndForward
Weiterleitung entfernen
Mit `Get-Mailbox user | Format-List ForwardingAddress,ForwardingSmtpAddress,DeliverToMailboxAndForward` zuerst den Ist-Zustand prüfen. Danach die nicht mehr benötigten Weiterleitungseigenschaften auf `$null` setzen.
PST-Export
Für On-Premises-Exchange wird `New-MailboxExportRequest` verwendet. Die Mailbox Import Export Role ist standardmäßig keiner Rollengruppe zugewiesen. Außerdem benötigt Exchange Trusted Subsystem Zugriff auf die Ziel-Netzwerkfreigabe. Beispiel: `New-MailboxExportRequest -Mailbox user@example.org -FilePath \\FILE01\PST$\user.pst`.
New-MailboxExportRequest -Mailbox user@example.org -FilePath \\FILE01\PST$\user.pst
Get-MailboxExportRequest -Mailbox user@example.org
Get-MailboxExportRequest | Get-MailboxExportRequestStatistics
PST-Export überwachen
`Get-MailboxExportRequest -Mailbox user@example.org` zeigt den Status. Mit `Get-MailboxExportRequest | Get-MailboxExportRequestStatistics` erhält man Details. Alte abgeschlossene Requests können mit `Remove-MailboxExportRequest` entfernt werden.
Adresslisten erstellen
`New-AddressList` erstellt Adresslisten auf Basis von Empfängerfiltern. Beispiel: `New-AddressList -Name 'Standort Koblenz' -RecipientFilter "CustomAttribute1 -eq 'Koblenz'"`. Filter vorab sorgfältig testen.
New-AddressList -Name 'Standort Koblenz' -RecipientFilter "CustomAttribute1 -eq 'Koblenz'"
Set-AddressList -Identity 'Standort Koblenz'
Update-AddressList -Identity 'Standort Koblenz'
Adresslisten ändern und aktualisieren
`Set-AddressList` ändert eine bestehende Liste. `Update-AddressList` aktualisiert deren enthaltene Empfänger.
Global Address List
Mit `Get-GlobalAddressList` werden GALs angezeigt. `Update-GlobalAddressList -Identity 'Default Global Address List'` aktualisiert die Empfänger der GAL.
Get-GlobalAddressList
Update-GlobalAddressList -Identity 'Default Global Address List'
Transportregeln
`New-TransportRule`, `Set-TransportRule`, `Enable-TransportRule`, `Disable-TransportRule` und `Remove-TransportRule` verwalten Mailflow-Regeln. Typische Aufgaben sind Disclaimer, Betreffpräfixe, Kennzeichnung externer Nachrichten und Nachrichtenrestriktionen. Eine Regel ohne Bedingungen kann unbeabsichtigt auf alle Nachrichten wirken.
Get-TransportRule | Format-Table Name,State,Priority
New-TransportRule -Name 'External Subject Tag' -FromScope NotInOrganization -SetHeaderName 'X-External-Mail' -SetHeaderValue 'true'
Disable-TransportRule -Identity 'External Subject Tag'
Transportregeln und Priorität
`Get-TransportRule | Format-Table Name,State,Priority` zeigt Regeln und Prioritäten. Änderungen zunächst mit engen Bedingungen testen.
Send und Receive Connectoren
`Get-SendConnector` und `Get-ReceiveConnector` sind zentrale Diagnosebefehle für SMTP. Mit `Get-SendConnector | Format-List Name,AddressSpaces,SmartHosts` und `Get-ReceiveConnector | Format-List Name,Bindings,RemoteIPRanges,PermissionGroups,AuthMechanism` lassen sich wichtige Einstellungen prüfen.
Get-SendConnector | Format-List Name,AddressSpaces,SmartHosts
Get-ReceiveConnector | Format-List Name,Bindings,RemoteIPRanges,PermissionGroups,AuthMechanism
SMTP Relay prüfen
Bei Relay-Problemen insbesondere `RemoteIPRanges`, `AuthMechanism`, `PermissionGroups` und `Bindings` kontrollieren. Receive Connectoren sollten nach dem Least-Privilege-Prinzip konfiguriert werden.
Mailbox-Berechtigungen
`Add-MailboxPermission` wird häufig für Full Access eingesetzt. Send As und Send on Behalf verwenden passende Exchange-/AD-Berechtigungen beziehungsweise `Set-Mailbox -GrantSendOnBehalfTo`. Vor Änderungen bestehende Rechte prüfen.
Get-MailboxPermission user
Set-Mailbox user -GrantSendOnBehalfTo delegate@example.org
Aliase und SMTP-Adressen
`Set-Mailbox -EmailAddresses` pflegt zusätzliche SMTP-Adressen. Die primäre Adresse wird mit `SMTP:` großgeschrieben, weitere Adressen typischerweise mit `smtp:`. Vorher `Get-Mailbox user | Select -ExpandProperty EmailAddresses` ausführen.
Get-Mailbox user | Select -ExpandProperty EmailAddresses
Set-Mailbox user -EmailAddresses @{add='smtp:alias@example.org'}
Mailbox-Datenbanken
`Get-MailboxDatabase`, `Get-MailboxDatabase | Get-MailboxStatistics` und `Get-MailboxDatabaseCopyStatus` gehören zum täglichen Werkzeugkasten. Mount-/Dismount-Vorgänge nur mit klarer Ursache durchführen.
Get-MailboxDatabase
Get-MailboxDatabase | Get-MailboxStatistics
Get-MailboxDatabaseCopyStatus
Health und Mailflow
`Test-ServiceHealth` prüft wichtige Exchange-Dienste, `Test-Mailflow` die Nachrichtenübermittlung. Für tiefergehende Diagnose Queue, Message Tracking und Eventlogs kombinieren.
Test-ServiceHealth
Test-Mailflow
Exchange-Zertifikate
`Get-ExchangeCertificate | Format-List Thumbprint,Services,Subject,NotAfter` liefert eine schnelle Übersicht. `Enable-ExchangeCertificate` ordnet Zertifikate Diensten wie IIS oder SMTP zu. Vor Austausch SANs, Ablaufdatum und Dienste prüfen.
Get-ExchangeCertificate | Format-List Thumbprint,Services,Subject,NotAfter
Nützliche Einzeiler
`Get-Mailbox -ResultSize Unlimited | Measure-Object` zählt Postfächer. `Get-MailboxDatabase | Select Name,Mounted` zeigt Datenbanken. `Get-Queue | Sort MessageCount -Descending | Select -First 10` findet die größten Queues. `Get-ExchangeServer | Select Name,AdminDisplayVersion` zeigt Versionen.
Get-Mailbox -ResultSize Unlimited | Measure-Object
Get-MailboxDatabase | Select Name,Mounted
Get-Queue | Sort MessageCount -Descending | Select -First 10
Get-ExchangeServer | Select Name,AdminDisplayVersion
Sicher arbeiten
Vor Änderungen an Regeln, Connectoren, Filtern oder Berechtigungen den Ist-Zustand dokumentieren und wo möglich `-WhatIf` verwenden. Ein guter Exchange-Admin kennt nicht nur den Änderungsbefehl, sondern auch den Rückweg.
Fazit
Die Exchange Management Shell ist für On-Premises-Administratoren ein mächtiges Werkzeug für Diagnose, Bulk-Operationen und präzise Konfiguration. Gerade bei Queues, Message Tracking, PST-Exporten, Weiterleitungen, Adresslisten, Transportregeln und Connectoren spart sie im Alltag erheblich Zeit.
-WhatIf verwenden und anschließend gezielt verifizieren.