Inhaltsverzeichnis

Die Microsoft Implementierung eines Email Server.

# Welche Service laufen
Get-Service | Where-Object { $_.Name -like "MSExchange*" } | Select-Object Name, Status

# Welche Logs gibt es
Get-WinEvent -ListLog *Exchange* | Select-Object LogName

# Welche Logs sind registriert
wevtutil el | Select-String "MSExchange"

Transport Dienste

Siehe auch Sender based routing

Frontend Transport

Mailbox Transport

Edge Transport

Hub Transport (nur in älteren Versionen von Exchange, wie 2010)

Transportdienst (Mailbox-Transportdienst in neueren Versionen von Exchange, wie 2013, 2016 und 2019)

Postfach

In Microsoft Exchange gibt es zwei Arten von Mailboxen: reguläre Mailboxen und freigegebene Mailboxen (Shared Mailbox).

Mailbox

Shared Mailbox (Freigegebene Mailbox)

Datenbank

In Exchange Server beziehen sich „Datenbanken“ auf die Speicherstrukturen, die verwendet werden, um E-Mails, Kontakte, Kalenderereignisse und andere Postfachdaten zu speichern. Diese Datenbanken werden auf dem Exchange-Server gehostet und ermöglichen die effiziente Speicherung und Verwaltung von E-Mail-Daten für Benutzer und Organisationen. Exchange-Datenbanken verwenden oft das Extensible Storage Engine (ESE), um die Daten persistent zu speichern und die Integrität der Datenbanken sicherzustellen.

EDB Datenbank

Eine EDB-Datei (Exchange Database File) ist eine Datenbankdatei, die von Microsoft Exchange Server verwendet wird, um E-Mails, Kontakte, Kalenderereignisse und andere Postfachdaten zu speichern. Diese Dateien enthalten die gesamte Information eines Exchange-Datenbankspeichers, einschließlich der Postfachdaten mehrerer Benutzer.

Die EDB-Dateien sind ein integraler Bestandteil des Exchange-Datenbanksystems und werden von Exchange Server zum Speichern und Organisieren von Daten verwendet. Wenn ein Benutzer beispielsweise eine E-Mail sendet, wird diese in einer EDB-Datei gespeichert, bis sie von einem anderen Benutzer abgerufen wird.

Die EDB-Dateien sind normalerweise in einem proprietären Format gespeichert und können nicht direkt von anderen Anwendungen geöffnet oder bearbeitet werden. Exchange Server bietet jedoch Tools und Mechanismen zum Sichern, Wiederherstellen und Verwalten von EDB-Dateien, um die Integrität und Verfügbarkeit der Daten zu gewährleisten.

Backup

Für den Microsoft Exchange Server sollte man insbesondere die folgenden Datenbanken und Dateien sichern:

Database Availability Group (DAG)

Ein „DAG“ (Database Availability Group) ist eine Funktion in Exchange Server, die Hochverfügbarkeit und Ausfallsicherheit für Postfachdatenbanken bietet. Eine DAG besteht aus mehreren Exchange-Servern, die in einer Gruppe zusammengefasst sind. Jeder Server in der DAG enthält Kopien der Postfachdatenbanken, die automatisch synchronisiert werden, um sicherzustellen, dass Benutzerkonten im Falle eines Serverausfalls oder einer Wartung weiterhin auf ihre E-Mails zugreifen können.

# Erstellen einer neuen DAG
New-DatabaseAvailabilityGroup -Name DAG1 -WitnessServer FILESERVER -WitnessDirectory C:\DAGWitness

# Hinzufügen von Servern zur DAG
Add-DatabaseAvailabilityGroupServer -Identity DAG1 -MailboxServer EXCHSRV1
Add-DatabaseAvailabilityGroupServer -Identity DAG1 -MailboxServer EXCHSRV2

# Erstellen einer neuen Datenbankkopie
Add-MailboxDatabaseCopy -Identity "MailboxDatabase01" -MailboxServer EXCHSRV2 -ActivationPreference 2

# Überprüfen des Status der DAG und Datenbankkopien
Get-DatabaseAvailabilityGroup -Identity DAG1
Get-MailboxDatabaseCopyStatus -Identity "MailboxDatabase01"

Exchange Server 2016 DAG - Database Availability Group Management

Cloud Migration

Es gibt verschiedene Möglichkeiten eine lokale Exchange Umgebung in die Azure Cloud zu migrieren.

Cutover

Exchange Server 2003, 2007, 2010, 2013. Gedacht für Migration von max. 2000 Postfächern. Es werden alle Postfächer in einem Batch migriert (Empfehlung bis 150). Nach der Migration gibt es keine lokalen Entitäten mehr, nur noch Cloud Identitäten. Umstellung des Nachrichtenfluss auf Exchange Online im Wartungsfenster. Hybrider Nachrichtenfluss ist nicht möglich.

Staged

Exchange Server 2003, 2007. Ermöglicht die Migration ausgewählter Postfächer. Diese werden mit AD Connect in das AzureAD synchronisiert. Lokale Postfach Benutzer werden zu Email Benutzern in Exchange Online. Migration erfolgt in Batches. AD Connect übernimmt die Weiterleitung eingehender lokaler Mails an migrierte Benutzer in Exchange Online. Ein hybrider Nachrichtenfluss zwischen dem lokalen Exchange Server und Exchange Online ist nicht möglich!

Hybrid

Exchange Server 2010, 2013, 2016, 2019. Migration ausgewählter Exchange Objekte zu Exchange Online. Postfächer können nach Bedarf zwischen den Umgebungen verschoben werden. Die Synchronisation der Objekte erfolgt mit AD Connect. Ermöglicht den parallelen Betrieb beider Umgebungen. Konfiguration mit dem Hybrid Configuration Wizard (HCW). Weiterleitung von eingehenden Nachrichten sowohl OnPremise als auch Exchange Online. Benötigt direkte SMTP Verbindung (Anforderungen an Firewall und Netzwerk).Verwaltung der Exchange Objekte in der lokalen Exchange Organisation.

Code

Email

$ExchangeSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://<Exchange-Server>/PowerShell/ -Authentication Kerberos
Import-PSSession $ExchangeSession -DisableNameChecking
 
Get-Mailbox
Get-Mailbox -Identity <Postfachname>
 
New-Mailbox -UserPrincipalName <UPN> -Alias <Alias> -Name <Name> -FirstName <Vorname> -LastName <Nachname> -Database <Datenbankname>
 
Remove-Mailbox -Identity <Postfachname>
 
Get-MailboxStatistics -Identity <Postfachname> | Select-Object DisplayName, TotalItemSize

AutoResponder

// Ohne Ende
Set-MailboxAutoReplyConfiguration -Identity "user@domain.local" -AutoReplyState Enabled -InternalMessage "Ihre Nachricht für interne Mails." -ExternalMessage "Ihre Nachricht für externe Mails."
 
// Mit Start und Enddatum
Set-MailboxAutoReplyConfiguration -Identity "user@domain.local" -AutoReplyState Scheduled -InternalMessage "Ihre Nachricht für interne Mails." -ExternalMessage "Ihre Nachricht für externe Mails." -StartDate "01/01/2022 00:00" -EndTime "01/01/2023 00:00"
 
// Deaktivieren
Set-MailboxAutoReplyConfiguration -Identity "user@domain.local" -AutoReplyState Disabled

Adressbuch

$ExchangeSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://<Exchange-Server>/PowerShell/ -Authentication Kerberos
Import-PSSession $ExchangeSession -DisableNameChecking
 
Get-AddressList
 
Get-AddressList -Identity "<Adressbuchname>"
 
New-AddressList -Name "<Name>" -RecipientFilter "<Filter>"
 
Set-AddressList -Identity "<Adressbuchname>" -RecipientFilter "<Filter>"
 
Remove-AddressList -Identity "<Adressbuchname>"

See here

[PS] C:\Windows\system32>Get-AddressList
 
Name                      DisplayName               RecipientFilter
----                      -----------               ---------------
All Contacts              All Contacts              RecipientType -eq 'MailContact'
All Distribution Lists    All Distribution Lists    ((Alias -ne $null) -and (ObjectCategory -like 'group'))
All Groups                All Groups                ((RecipientType -eq 'MailUniversalDistributionGroup') -or (RecipientType -eq 'MailUniversalSecurityGroup') -or (RecipientType
                                                    -eq 'MailNonUniversalGroup') -or (RecipientType -eq 'DynamicDistributionGroup'))
All Users                 All Users                 RecipientType -eq 'UserMailbox'
Öffentliche Ordner        Öffentliche Ordner        ObjectClass -eq 'publicFolder'
Public Folders            Public Folders            ((Alias -ne $null) -and (ObjectCategory -like 'publicFolder'))
All Rooms                 All Rooms                 ((RecipientType -eq 'UserMailbox') -and (ResourceMetaData -like 'ResourceType:*') -and (ResourceSearchProperties -ne $null))
 
[PS] C:\Windows\system32>Get-GlobalAddressList
 
Name                        RecipientFilter
----                        ---------------
Globale Standardadressliste ((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'))))
 
[PS] C:\Windows\system32>Get-OfflineAddressBook
 
Name                                 Versions   AddressLists
----                                 --------   ------------
Standard-Offlineadressliste (Ex2013) {Version4} {\Globale Standardadressliste}
 
[PS] C:\Windows\system32>Get-OfflineAddressBook "Standard-Offlineadressliste (Ex2013)" | Format-List Name, AddressLists
 
 
Name         : Standard-Offlineadressliste (Ex2013)
AddressLists : {\Globale Standardadressliste}
 
[PS] C:\Windows\system32>Set-OfflineAddressBook -Identity "Standard-Offlineadressliste (Ex2013)" -AddressLists "Globale Standardadressliste", "TestContactList"
 
[PS] C:\Windows\system32>Update-OfflineAddressBook -Identity "Standard-Offlineadressliste (Ex2013)"
 
[PS] C:\Windows\system32>Get-OfflineAddressBook "Standard-Offlineadressliste (Ex2013)" | Format-List Name, AddressLists
 
 
Name         : Standard-Offlineadressliste (Ex2013)
AddressLists : {\TestContactList, \Globale Standardadressliste}
 
[PS] C:\Windows\system32>

Kalender

$ExchangeSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://<Exchange-Server>/PowerShell/ -Authentication Kerberos
Import-PSSession $ExchangeSession -DisableNameChecking
 
Get-MailboxFolderStatistics -Identity <Benutzername> -FolderScope Calendar | Select-Object Name, ItemsInFolder, FolderSize
 
New-MailboxAppointment -Mailbox <Benutzername> -Subject "<Betreff>" -Location "<Ort>" -Start "<Startzeit>" -End "<Endzeit>"
 
Set-MailboxCalendarItem -Identity <TerminID> -Subject "<Neuer Betreff>" -Location "<Neuer Ort>" -Start "<Neue Startzeit>" -End "<Neue Endzeit>"
 
Remove-MailboxCalendarItem -Identity <TerminID>
 
 
Get-MailboxFolderPermission -Identity user@domain.local:\Calendar
Add-MailboxFolderPermission -Identity user@domain.local:\Calendar -User otheruser@domain.local -AccessRights <Zugriffsrechte>
Set-MailboxFolderPermission -Identity user@domain.local:\Calendar -User otheruser@domain.local -AccessRights <Zugriffsrechte>
Remove-MailboxFolderPermission -Identity user@domain.local:\Calendar -User otheruser@domain.local

Troubleshooting

Kalender

// berechtigungen
Get-MailboxFolderPermission -Identity "<Postfach>:\Kalender"
 
// synchronisierung
Get-CalendarProcessing -Identity "<Postfach>"
 
// eventlog
Get-EventLog -LogName Application -Source "MSExchange*"
 
//timezone
Get-MailboxRegionalConfiguration -Identity <Postfach>
Get-Mailbox -Database <Datenbankname> | Get-MailboxRegionalConfiguration
Set-MailboxRegionalConfiguration -Identity <Benutzer> -TimeZone <Zeitzone>

Mailqueue

$ExchangeSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://<Exchange-Server>/PowerShell/ -Authentication Kerberos
Import-PSSession $ExchangeSession -DisableNameChecking
 
Get-Queue
Get-Queue -Identity <Warteschlangenname>

MessageTrace

Get-MessageTrackingLog -Sender "<Absender>" -Recipients "<Empfänger>" -MessageSubject "<Betreff>"
Get-MessageTrackingLog -EventID "FAIL" -Start "<Startdatum>" -End "<Enddatum>"
Get-Content -Path "C:\Exchange\TransportRoles\Logs\ProtocolLog\SmtpReceive\<Protokolldatei>"
Get-TransportServer | Select-Object -Property Name, TotalRetryQueueLength, TotalSubmissionQueueLength

Logs

Aufgaben kann man mit Powershell automatisieren.

Downloads

ActiveSync

Exchange Active Sync (ActiveSync) ist ein von Microsoft entwickeltes Protokoll zur Synchronisierung von E-Mails, Kontakten, Kalendern und Aufgaben zwischen einem E-Mail-Server und mobilen Geräten wie Smartphones und Tablets. Es ermöglicht eine nahtlose Integration von E-Mail-Diensten, Kalendern und Kontakten auf verschiedenen Geräten und Plattformen.

# Finde alle Exchange Active Sync Geräte
PS C:\> Get-MobileDevice
 
RunspaceId              : ecfdbf6d-b44a-4369-aeed-4cb29e286eb0
FriendlyName            :
DeviceId                : sophfw5x48gu9ryw66f5tnmu9nlg8ip4
DeviceImei              :
DeviceMobileOperator    :
DeviceOS                :
DeviceOSLanguage        :
DeviceTelephoneNumber   :
DeviceType              : iPhone5sGlobal
DeviceUserAgent         : SecurePIM 7.23.4 - iOS 10.2.1
DeviceModel             : iPhone5sGlobal
FirstSyncTime           : 21.02.2017 15:57:40
UserDisplayName         : dom.local/USERS/User1
DeviceAccessState       : Allowed
DeviceAccessStateReason : Global
DeviceAccessControlRule :
ClientVersion           : 14.1
ClientType              : EAS
IsManaged               : False
IsCompliant             : False
IsDisabled              : False
AdminDisplayName        :
ExchangeVersion         : 0.10 (14.0.100.0)
Name                    : iPhone5sGlobal§sophfw5x48gu9ryw66f5tnmu9nlg8ip4
DistinguishedName       : CN=iPhone5sGlobal§sophfw5x48gu9ryw66f5tnmu9nlg8ip4,CN=ExchangeActiveSyncDevices,CN=User1,OU=USERS,DC=dom,DC=local
Identity                : dom.local/Users/User1/ExchangeActiveSyncDevices/iPhone5sGlobal§sophfw5x48gu9ryw66f5tnmu9nlg8ip4
Guid                    : 044e412d-c004-4530-9ed9-19eb70a3ef91
ObjectCategory          : dom.local/Configuration/Schema/ms-Exch-Active-Sync-Device
ObjectClass             : {top, msExchActiveSyncDevice}
WhenChanged             : 06.05.2024 12:20:17
WhenCreated             : 21.02.2017 16:57:40
WhenChangedUTC          : 06.05.2024 10:20:17
WhenCreatedUTC          : 21.02.2017 15:57:40
OrganizationId          :
Id                      : dom.local/Users/User1/ExchangeActiveSyncDevices/iPhone5sGlobal§sophfw5x48gu9ryw66f5tnmu9nlg8ip4
OriginatingServer       : vie-srv-dc02.dom.local
IsValid                 : True
ObjectState             : Unchanged
$all_devices = Get-MobileDevice
Get-MobileDeviceStatistics -Identity $all_devices[0].Guid.toString()
[PS] C:\> Get-Mailbox -ResultSize Unlimited | Get-CasMailbox | Where-Object { $_.ActiveSyncEnabled -eq $true }