Mailbox von Exchange Online zurück nach Exchange Server on Premises verschieben („Offboarding“)

Es gibtr zwar einen schicken Assistenten der beim Cloud-OnBoarding hilft, aber natürlich kein GUI das beim zurückverschieben von Mailboxen hilft.

Lösung

# Exchnage Online PowerShell Modul importieren
PS C:\> Import-Module ExchangeOnlineManagement

# Exchange Online Credentials angeben
PS C:\> $onlinecred = Get-Credential

# Exchange Online PowerShell Verbindug herstellen
PS C:\> Connect-ExchangeOnline -Credential $onlinecred

# On Premises (lokaler Exchange Server) Credentials angeben
PS C:\> $opcred = Get-Credential

# Neuen Move-Request erstellen
PS C:\> Get-Mailbox -Identity <MAILBOXNAME>| New-MoveRequest -Outbound -RemoteTargetDatabase "<LOKALE DATENBANK NAME>" -RemoteHostName <EXCHANGE SERVER FQDN> -RemoteCredential $opcred -TargetDeliveryDomain <DOMAIN>

Outlook Suche in Freigegeben Ordnern liefert keine Ergebnisse (Suche funktioniert nicht in „fremden“ Ordnern)

Die Outlook-Suche verhält sich ja häufiger etwas ungewöhnlich, das man aber sei einer Weile praktisch nicht mehr freigegebene Ordnern (Nicht freigegebene Postfächer) von anderen Nutzern suchen kann, ist merh als ärgerlich. Grade in Zeiten von Exchange Online ist das sehr ärgerlich.

Schuld ist Outlook in Verbindunge mit dem Windows Indexdienst. Freigegebene Ordner werden standartmäßig wie freigegebene Postfächer heruntergeladen; diese landen somit im Index. Leider beauftragt Outllook bei der Sucher nur noch „Eigenes Postfach“ und liefer somit bei freigegebenen Ordnern nur leere Ergebnismengen zurück.

Woraround

Man kann Exchange dazu zwingen, die Serverseitige Suche zu verwenden. Der Zugriff auf Microsoft 365 Exchange Online-Postfächer ist dann zwar etwas langsamer, dafür liefert die Outlook-Suche plötzliche wieder korrekte Ergebnisse. Bonus: Neu vergebene Berechtigungen greifen nun ebenfalls sofort.

Das geht unter den E-Mail Konten > E-Mail > Postfach auswähen und oben „Ändern“ > Weitere Einstellungen > Erweitert > Freigegebene Ordner herunterladen AUS schalten.

Exchange MaiboxMoveRequest schlägt fehl MapiExceptionFolderHierarchyChildrenCountQuotaExceeded: Unable to create folder. ‎0x80004005

Bei der Migration einer Mailbox nach Exchange Online schlägt die Sychronistion mit diesem Fehler fehl:

MigrationMRSPermanentException: Error: Could not create folder 2288. –> MapiExceptionFolderHierarchyChildrenCountQuotaExceeded: Unable to create folder. ‎(hr=0x80004005, ec=1253)‎

Exchange Online hat mehrere Limits. Zum Beispiel eine Verschachtelungstiefe von 300 Ordnern und 1000 Ordner pro IPM_SUBTREE Ordner. Aber so viele Ordner gibt es doch gar nicht?

Ordner in Exchange Online (richtig) zählen

Die Anzahl der Ordner pro Postfach lassen sich ganz einfach zählen:

Get-MailboxFolderStatistics | Measure

Aber das ist nicht sie ganze Warheit; via MAPI lassen sich Ordner auch außerhalb der in Outlook sichtbaren Postfachstruktur anlegen. Beispielweise erstellt jedes ActiveSync-Gerät einene eigenen Ordner für seine Konfiguration und Synchronisationsdaten. Wirklich alle Ordner zählt:

Get-MailboxFolderStatistics -FolderScope NonIpmRoot | Measure

Möglicherweise sehen die Zahlen hier auf einmal völlig anders aus. Vor allem iPhone-Geräte scheinen relativ anfällig für die (unbewusste) Erzeugung übermäßig große Ordnerzahlen zu sein. Wir haben hier Wert zwischen 50.000 und 120.000 gesehen – was auch beim zählen wahnsinnig lange dauert. „Get-MailboxFolderStatistics“ läuft hier auch mal drei Stunden lang.

Nicht-Sichtbare Exchange Ordner entfernen

In unsere Fällen war es am einfachsten, die mobilen Geräte einfach alle von dem betroffenen Account zu entfernen (dabei werden alle automatisch erstellten Ordner entfernt) und nach der Migration neu zu verbinden.

Get-MobileDevice -Mailbox <NAME> | Remove-MobileDevice

Buchungsanfrage abgelehnt: „Die Ressource akzeptiert keine Besprechungen, die länger als 1440 Minuten dauern“

Problem

Eine Ressource lässt sich in Exchange 2016/2019 nicht länger als einen Tag lang (1440 Minuten) buchen. Für Autos oder Leihgeräte sind mehrere Tage oder Wochen aber notwendig.

Lösung

Das ist richtig, die maximale Standartzeit für gebuchte Ressourcen ist 24 Stunden.

Früher gab es mal das Cmdlet Get-MailboxCalendarSettings, mit dem man die Buchungszeit (MaximumDurationInMinutes) einstellen konnte. Dieser Befehl wurde aber (ganz ohne die übliche „Deprecated“ Meldung) abgelöst. Hier sind die neuen.

Einstellung (für die Ressource „Auto*“) anzeigen

[PS] C:\>Get-CalendarProcessing -Identity vw* | fl maximumd*

MaximumDurationInMinutes : 1440

Einstellung ändern

[PS] C:\>Set-CalendarProcessing -Identity vw* -MaximumDurationInMinutes 2147483647

Der Wert ist ein Int32, 2147483647 also das Maximum. Knapp 4000 Jahre reichen aber auch für langfristiges ausleihen aus.

Office 365 Exchange Online Powershell unter Windows 10 Verbindung herstellen

Die Office 365 Exchange Online Powershell benötigt eigentlich keine Powershell Modul-Installation, weil zu Exchange nur eine Remote-Session hergestellt wird.

Anders sieht da aus, wenn man die MFA (Mehr-Faktor-Authentifizierung) eingeschaltet hat. Dazu unten mehr.

Exchange Online Powershell ohne MFA

$credential = Get-Credential
$exchangeSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://outlook.office365.com/powershell-liveid/" -Credential $credential -Authentication "Basic" -AllowRedirection
Import-PSSession $exchangeSession -DisableNameChecking -AllowClobber

Das erste Kommando fragt die Credentials ab und speichert diese in der Variable $credential, das zweite verwendet diese für die Verbindung und das dritte importiert die Remote-Sitzung.

Exchange Online Powershell mit 2FA (Mehr-Faktor Authentifizierung)

Hierfür muss man zuerst doch noch manuell ein Modul herunterladen, das „Exchange Online Remote PowerShell-Modul„. Man findet den Download für die Offline-Installation innerhalb seines Office 365 Portals in der EAC. Mann kann diese Spezial-Powershell aber auch direkt ohne Umwege herunterladen und starten; der Link dazu steht weiter unten.

Office 365 Portal > Exchange Administrator Center (EAC) > Hybrid > „Konfigurieren“ (‚Das Exchange Online-PowerShell-Modul unterstützt mehrstufige Authentifizierung.‘)

Hat man das Modul heruntergeladen und installiert, sollte man einmal sein WinRM-Konfiguration testen. Ein lauffähiges WinRM-System mit eingeschalteter Basic-Authentifizierung (Default) ist Voraussetzung.

WinRM-Konfiguration in der Powershell „als Administrator“ anschauen:

winrm get winrm/config/client/auth

Sollte da „Basic = false“ in der Ausgabe stehen, muss man zwingend Basic-Auth einschalten:

winrm set winrm/config/client/auth @{Basic="true"}

Dann kann man auch schon endlich fast eine Verbindung herstellen; dazu das „Microsoft Exchange Online Powershell Module“ im Startmenü öffnen. Dier hier ist der direkte Download-Link zur Exchange Shell:

https://cmdletpswmodule.blob.core.windows.net/exopsmodule/Microsoft.Online.CSE.PSModule.Client.application

In der neuen Exchange-Powershell tippt man dann:

Connect-EXOPSSession -UserPrincipalName <DEIN@UPN.DE>

Und schon stehen einem die altbekannten CMDlets wie Get-Mailbox, Get-DistributionGroup oder Get-MailboxPermission zur Verfügung.

Exchange 2280: „Die Modul DLL C:\Program Files\Microsoft\Exchange Server\V14\Bin\kerbauth.dll konnte nicht geladen werden“

Problem

Nach der Deinstallation von Exchange 2010 starten IIS-Sites auf dem Server nicht mehr richtig, es werden 503-Fehler ausgegeben, Application Pools werden direkt nach dem Starten wieder beendet und im Anwendungs-Ereignisprotokoll werden sehr viele dieser Fehler protokolliert:

Log Name: Application
Source: Microsoft-Windows-IIS-W3SVC-WP
Event ID: 2280
Task Category: None
Level: Error
Keywords: Classic
Description:
The Module DLL C:\Program Files\Microsoft\Exchange Server\V14\Bin\kerbauth.dll failed to load. The data is the error.

Lösung

Das Exchange-Setup fügt eine eigene Modul-DLL für Kerberos-Authentifizierungen in die IIS-Konfiguration ein, entfernt diesen Eintrag be der Deinstallation aber nicht.

In der IIS-Metabasis: C:\Windows\System32\inetsrv\config\ApplicationHost.config die zugehörige Zeile entfernen, IISReset, fertig:

<add name="kerbauth" image="C:\Program Files\Microsoft\Exchange Server\V14\Bin\kerbauth.dll" />

Exchange 2013/2016 und Office 365 Abwesenheitsbenachrichtigung (automatische Anwort) für Postfächer setzen

Problem

An zentraler Stelle sollen automatisch Abwesenheitsbenachrichtigungen aktiviert und konfiguriert werden. Zum Beispiel soll so im Krankheitsfall das Postfach eines Benutzers automatisch antworten – ohne das der Benutzer seinen Abwesenheitsassistenten bemühen muss.

Lösung mit Beispielen

Dafür gibt es das cmdlet „Set-MailboxAutoReplyConfiguration„, das die automatischen Antworten für fremde Mailboxen einschalten, anzeigen und anpassen kann.

Benutzer die das tun sollen, müssen natürlich über die passende Berechtigung im Zielpostfach verfügen. Die Berechtigung heisst „Automatic replies“ und ist standartmäßig in den Rollen „Organization Management“, „Recipient Management“ und „Help Desk“ enthalten.

Status der Auto-Antwort prüfen

[PS] C:\> Get-MailboxAutoReplyConfiguration -Identity MAILBOX| Select-Object AutoReplyState | fl

Auto-Antwort einschalten

[PS] C:\> Set-MailboxAutoReplyConfiguration -Identity MAILBOX -AutoReplyState enable

Auto-Antwort ausschalten

[PS] C:\> Set-MailboxAutoReplyConfiguration -Identity MAILBOX -AutoReplyState disable

Interne Auto-Antwort – Text verfassen

[PS] C:\> Set-MailboxAutoReplyConfiguration -Identity MAILBOX -InternalMessage "IHRE NACHRICHT"

Externe Auto-Antwort – Text verfassen

[PS] C:\> Set-MailboxAutoReplyConfiguration -Identity MAILBOX -ExternalMessage "IHRE NACHRICHT"

Weitere interessante Parameter sind

  • -AutoReplyState scheduled
    • Hier lassen sich Zeiten und Daten für die Auto-Antwort festlegen.
    • Notwendig sind dann Werte für die Start- ud Endzeiten:
      Set-MailboxAutoReplyConfiguration -Identity MAILBOX -AutoReplyState Scheduled -StartTime "7/10/2015 08:00:00" -EndTime "7/15/2015 17:00:00" -InternalMessage "IHRE NACHRICHT"
  • -ExternalAudience
    • Ob Auto-Antworten an externe Empfänger gesendet werden sollen: None (keine), known (Nur an Empfänger aus der Kontaktliste der Mailbox), All (an jeden)