getestet unter: Exchange Server 2019 Exchange Online (Stand 07/2024)
Rekursive Vererbung der Postfachberechtigungen von Posteingang in den Unterordnern unter Exchange 2010/2013/2016 /2019 und Exchange Online mittels Exchange (Online) Management Shell
Mit diesem Skript ist es möglich die unter Posteingang vergebenen Rechte automatisch auf untergeordnete Ordner zu vererben. Man benötigt hierfür weder ExFolders noch explizite Besitzrechte auf das Postfach, sie müssen dieses Skript lediglich als Exchange-Administrator (Mitgliedschaft in der Gruppe "Organization Management") auf dem Exchange-Server ausführen. Es sind keine weiteren Änderungen nötig, keine Tools keine DLLs, einfach mit Boardmitteln.
Zuerst hoffte ich mit folgendem Skript einfach Rechte verteilen zu können (was wohl auch mal ging): Get-MailboxFolder –Identity username:\Posteingang -Recurse | Add-MailboxFolderPermission -User user2 -AccessRights Owner
Leider geht es nicht (mehr). Es erscheint folgender Fehler:
Das angegebene Postfach "[...]" ist nicht vorhanden + CategoryInfo : NotSpecified: (0:Int32) [Get-MailboxFolder], ManagementObjectNotFoundException + FullyQualifiedErrorId : C74849A8,Microsoft.Exchange.Management.StoreTasks.GetMailboxFolder
Anschließend schrieb ich das Skript für die Exchange-Management-Shell.
Zur Funktion des Skripts
Es fragt zuerst die notwendigen Variablen ab:
Soll gelöscht oder hinzugefügt werden?
Welches Postfach soll bearbeitet werden?
Anschließend liest es mittels des cmdlets get-mailboxfolderpermission die vorhandenen Benutzer und deren Rechte aus und übergibt diese in ein Array
Nun wird via cmdlet Get-MailboxFolderStatistics die Ordnerstruktur unter Posteingang rekursiv (also auch alle Unterunterordner etc.) ausgelesen und ebenfalls in ein Array gelegt.
In einer Schleife werden nun die einzelnen Pfäde abgefragt und mittels cmdlet Add-MailboxFolderPermission die Rechte der jeweiligen Benutzer die vorher gespeichert wurden angewendet bzw. entfernt wenn löschen gewählt wurde.
Positiv-Meldungen werden grün angezeigt Fehlermeldungen 1:1 rot in original angezeigt.
Anwendung des Skripts (ab Version 3.0) 28.07.2024 Das Skript wurde nun nochmal nach einiger Zeit für den Betrieb unter Exchange Online und Exchange Server 2019 überarbeitet. Hinzugekommen ist nun auch die Vererbung von Berechtigungen ab der obersten Ebene des Postfachs. Außerdem gibt es nun Parameter für Ordner- und Ordnertypausnahmen. Auch die lokalisierten Standard-Berechtigungen "ANONYM" und "Standard" lassen sich nun über einen Parameter festlegen. Das Verbose-Logging wurde nochmal erweitert. Im Falle eines Fehlers bitte immer erst mit dem Schalter "-Verbose" das Script debuggen.
Die Batchdatei als Wrapper ist im Archiv noch vorhanden, empfohlen wird aber nun die Nutzung des Skriptes in einer bestehenden und authentifizierten Exchange PowerShell-Session.
Exchange Online und Exchange Server 2019 Kompatibilität wiederhergestellt
Berechtigungen von der obersten Ebene des Postfachs können nun vererbt werden
Postfachordnerausnahmen können nun definiert werden
Ausnahmen für Postfachodertypen können nun definiert werden
Lokalisierte Standardberechtigungsgruppen können nun als Parameter übergeben werdne
Anwendung des Skripts (ab Version 2.0) Das komplette Script wurde überarbeitet. Variablen werden jetzt über den bei PowerShell üblichen Param-Block abgefragt. Ebenso werden die Berechtigungen nun statt über den fehleranfälligen FolderPath über die FolderID gesetzt. Dadurch gibt es keine Probleme mehr mit Sonderzeichen im Ordnernamen. Das Skript verfügt über einen detaillierten Beschreibungsheader, alle Parameter (Get-Help -Parameter) sind jeweils beschrieben.
Die Berechtigungen einzelner Benutzer können rekursiv entfernt werden
Vorhandene Berechtigungen können automatisch ersetzt werden.
Alle vorherigen Funktionen sind enthalten
Verbose-Schalter für Debugging-Zwecke integriert.
Berechtigungen können ab einer beliebigen Ebene vererbt werden.
Für Vererbung von Berechtigungen im Ordner Posteingang verwenden Sie das Skript mit einer Version vor Version 1.3. Das Skript ab Version 1.3 vergleicht alle Ordner der Mailbox mit dem angegebenen Wert, weswegen die Ausführung länger dauert. Ab Version 1.3 können Ordner in der obersten Ebene ausgewählt werden oder bestimmte Ordner unter den Topfoldern, wenn man z. B. nur Berechtigung von einem bestimmten Ordner unter Posteingang vererben möchte.
Anwendung des Skripts (ab Version 1.3)
Laden Sie das ppsi_skript als ZIP-Archiv herunter (siehe Ende des Textes)
Extrahieren (!) Sie die beiden Dateien in einen beliebigen Ordner
Setzen Sie die Berechtigungen für die neu zugreifenden Benutzer im Ordner "Posteingang" wie gewöhnlich über Outlook (oder über das cmdlet Add-MailboxFolderPermission).
Bearbeiten Sie die ps1-Datei und geben Sie in der Zeile 15 für die Variable MBXRootFolder den Folder an, dessen Berechtigungen für vererbt werden sollen:
Sie können hier Ordner auf der obersten Ebense angeben (z. B. Posteingang, Gesendete Elemente) oder Objekte unter den Root-Objekten (z. B. Posteingang\gummibär)
Öffnen Sie anschließend die Batchdatei "start_ppsi_script_msx.cmd" auf dem Exchange-Server (Sie müssen als Administrator angemeldet sein (Mitglied in der Gruppe "Organization Management")), alternativ können Sie das Skript auch direkt aus der Exchange Management Shell aufrufen (Navigieren Sie hierzu via cd in den entsprechenden Ordner und geben Sie dann ".\permission_propagation_subfolder_inbox.ps1" ein.)
Die Batchdatei prüft wo die Exchange-Installation liegt (C:, D:), öffnet dann die Powershell mit Exchange-Modul und startet dann das eigentliche Skript
In der ersten Abfrage können Sie entweder "h" oder "l" eingeben für hinzufügen oder löschen.
In der zweiten Abfrage geben Sie den Kontonamen des Benutzers an, dessen Postfach bearbeitet werden soll.
Das Skript geht nun wie unter "Zur Funktion des Skripts" beschrieben vor
Am Ende der Ausführung des Skripts drücken Sie eine beliebige Taste zum Schließen des Fensters
Sie können das Skript auch automatisiert ablaufen lassen, füllen Sie dazu einfach die Variablen in der .ps1-Datei mittels Notepad aus.
Anwendung des Skripts (bis Version 1.21)
Laden Sie das ppsi_skript als ZIP-Archiv herunter (siehe Ende des Textes)
Extrahieren (!) Sie die beiden Dateien in einen beliebigen Ordner
Setzen Sie die Berechtigungen für die neu zugreifenden Benutzer im Ordner "Posteingang" wie gewöhnlich über Outlook (oder über das cmdlet add-mailboxfolderpermission).
Öffnen Sie die Batchdatei "start_ppsi_script_msx.cmd" auf dem Exchange-Server (Sie müssen als Administrator angemeldet sein (Organization Management)), alternativ können Sie das Skript auch direkt aus der Exchange Management Shell aufrufen (Navigieren Sie hierzu via cd in den entsprechenden Ordner und geben Sie dann ".\permission_propagation_subfolder_inbox.ps1" ein.)
Die Batchdatei prüft wo die Exchange-Installation liegt (C:, D:), öffnet dann die Powershell mit Exchange-Modul und startet dann das eigentliche Skript
In der ersten Abfrage können Sie entweder "h" oder "l" eingeben für hinzufügen oder löschen.
In der zweiten Abfrage geben Sie den Kontonamen des Benutzers an, dessen Postfach bearbeitet werden soll.
Das Skript geht nun wie unter "Zur Funktion des Skripts" beschrieben vor
Am Ende der Ausführung des Skripts drücken Sie eine beliebige Taste zum Schließen des Fensters
Sie können das Skript auch automatisiert ablaufen lassen, füllen Sie dazu einfach die Variablen in der .ps1-Datei mittels Notepad aus.
Das Skript habe ich auf meinem Exchange-Server (2010) ausgiebig getestet und konnte keine Fehler feststellen. Sollten Sie Fehler feststellen oder Wünsche haben schreiben Sie mir bitte einen Kommentar. Sollten Sie das Skript erfolgreich (oder auch nicht erfolgreich) auf einer neueren Exchange-Umgebung getestet haben, würde ich mich über Feedback via Commentbox freuen.
UPDATE: Version 2.1: + Postfachordner werden nun nicht mehr Case sensitiv verglichen + Das Berechtigungs-Array wird nun vorher einmal "leer" initialisiert Version 2.0: + Vollständig überarbeitet + PARAM-Block und Verbose-Mode integriert + Ersetzen integriert Infos zur Version 2.0 Version 1.3: + Es können nun auch Ordner in der obersten Ebene der Mailbox ausgewählt werden, ebenso können Unterordner von root-Ordnern ausgewählt werden UPDATE: Version 1.21: + Ordner mit dem Zeichen "/" im Namen werden nun fehlerfrei bearbeitet UPDATE: Version 1.2: + Die Variable ExchangeInstallPath wird nun zum identifizieren des Exchange-Installationsordners verwendet UPDATE: Version 1.1: + Nun werden neben der Stufenrechte auch die benutzerdefinierten Rechte verteilt.
Thomas Windscheif arbeitet bei excITe Consulting und ist langjähriger Berater im Bereich IT-Infrastruktur und Groupware. Sowohl Kleinunternehmen z. B. im Handwerk als auch der größere fertigende Mittelstand gehören zu seinem Projektumfeld. Im Wesentlichen gehören die Planung von Infrastruktur-Migrationen, Cloud-Lösungen (Microsoft 365), Groupware-Umgebungen (z. B. Exchange) und deren Umsetzung zu seinen Aufgaben. Insbesondere im Umfeld hybrider Identitätsumgebungen mit Entra Connect und den Möglichkeiten zur Härtung der IT-Landschaft konnte er in vielen Projekten Erfahrungen sammeln. Neues begeistert ihn aber ebenso und so unterstützt Thomas Windscheif auch bei themenfremden IT-Systemen, überall da wo er helfen kann.
Sein Ziel: Die Mehrwerte der heutigen IT-Lösungen für einfacheres und modernes Arbeiten beim Kunden einbringen.
Login
Sie haben ein ungelöstes Problem in Ihrer Exchange Server oder Microsoft-Infrastruktur? Treten Sie gerne mit mir in Kontakt.
Sowohl bei einfachen Exchange Installationen, als auch bei hochverfügbaren, lastverteilten Mehrstandort-DAG-Topologien mit Loadbalancern
unterstütze ich Sie -auch kurzfristig- sehr gerne.
- Spontaner Administrationsverlust unter Exchange Online - Und wie man es behebt! -
Zweimal in diesem Jahr hatte ich bei Kunden das Phänonem, dass spontan bestimmte Administrationsrechte unter Exchange Online fehlten, trotz der Rollenmitgliedschaft "Globaler Administrator" bzw. "Exchange Administrator".
Aus ungeklärten Gründen waren verschiedene RBAC-Rechte unter Exchange Online für "Organization Management" spontan verschwunden.
Im folgenden Artikel löse ich das Problem mit Skripten und erläutere das Vorgehen