GUIDE / MICROSOFT EXCHANGE / POWERSHELL

Microsoft Exchange Server 2019 Exchange Management Shell – essential PowerShell commands for administrators

Exchange Management Shell commands for Exchange Server 2019: mail queues, message tracking, mailbox forwarding, PST exports, address lists, GAL, transport rules, connectors, permissions, databases, certificates, health checks and daily Exchange administration.

Exchange 2019 Status: Exchange Server 2019 reached end of support on 14 October 2025. This guide is a practical reference for existing installations and should be paired with a migration or upgrade plan.
EMS→DIAGNOSE→CONFIGURE→VERIFY

Important: Exchange Server 2019 is out of support

Exchange Server 2019 reached end of support on October 14, 2025. This article is a practical reference for existing Exchange 2019 environments, not a recommendation for new deployments. Evaluate Exchange Server Subscription Edition or migration to Microsoft 365.

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, messageszahl 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 messages 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 messages 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 messagesverfolgung. 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 forwardingen stehen `-ForwardingAddress` und `-ForwardingSmtpAddress` zur Verfügung. Mit `-DeliverToMailboxAndForward $true` bleibt die Nachricht im ursprünglichen mailbox und wird zusätzlich weitergeleitet. Beispiel: `Set-Mailbox user -ForwardingSmtpAddress 'smtp:target@example.net' -DeliverToMailboxAndForward $true`. Externe automatische forwardingen 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 forwardingseigenschaften 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 address lists 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 messages und messagesrestriktionen. Eine Regel ohne Bedingungen kann unbeabsichtigt auf alle messages 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 messagesü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 certificates 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 mailboxes. `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, forwardingen, address lists, transport rules und Connectoren spart sie im Alltag erheblich Zeit.

Praxis-Check: Vor produktiven Änderungen Ist-Zustand dokumentieren, Auswirkungen prüfen, wenn möglich -WhatIf verwenden und anschließend gezielt verifizieren.
About Sille-Solutions