none
2013 CU11: Berechtigungen eines Users über alle Postfächer auslesen RRS feed

  • Frage

  • Liebes Forum,

    ich möchte die Berechtigungen eines Users über alle Postfächer auslesen.
    Sprich, auf welche Postfächer und auf welche Postfachordner hat der User welchen Zugriff.

    Da gibt es bestimmt was von Powershell, doch ich krieg's nicht raus :-(

    Ich bin für jede Hilfe und/oder Anregung dankbar!

    Viele Grüße
    Davorin

    Donnerstag, 26. Mai 2016 09:11

Antworten

  • Moin,

    versuchen Sie es mit folgendem Script - evtl. die Ausgabe statt "FT" in der vorletzten Zeile anpassen:

    -----------------------

    # Code to get mailbox # folder permissions for all folders in
    # a mailbox.
    #
    # Example:
    #   Get-MailboxFolderPermissionsForAllFolders -Mailbox egon.tester@company.com -User liese.mueller@company.com
    [CmdletBinding()]
    param (
     [Parameter( Mandatory=$true)]
     [string]$Mailbox,
       
     [Parameter( Mandatory=$true)]
     [string]$User,
       
    )
    # Liste der Ordner, die nicht bearbeitet werden:
    $exclusions = @("/Sync Issues",
                    "/Sync Issues/Conflicts",
                    "/Sync Issues/Local Failures",
                    "/Sync Issues/Server Failures",
                    "/Recoverable Items",
                    "/Deletions",
                    "/Purges",
                    "/Versions",
      "/Synchronisierungsprobleme",
      "/Synchronisierungsprobleme/Konflikte",
      "/Synchronisierungsprobleme/Lokale Fehler",
      "/Synchronisierungsprobleme/Serverfehler",
      "/Gelöschte Elemente"
                    )

    # Read list of mailbox folders, exclude above listed folders
    $mailboxfolders = @(Get-MailboxFolderStatistics $Mailbox | Where {!($exclusions -icontains $_.FolderPath)} | Select FolderPath)
    # Loop over all folders
    foreach ($mailboxfolder in $mailboxfolders)
    {
        $folder = $mailboxfolder.FolderPath.Replace("/","\")
        if (($folder -match "Top of Information Store") -or ($folder -match "Oberste Ebene des Informationsspeichers"))
        {
           $folder = $folder.Replace("\Top of Information Store","\")
           $folder = $folder.Replace("\Oberste Ebene des Informationsspeichers","\")
        }
        $identity = "$($mailbox):$folder"
        # Get folder permission
        Write-Host "Reading permissions for $user to $identity" -ForeGroundColor Green
        Get-MailboxFolderPermission -Identity $identity -User $user -ErrorAction SilentlyContinue | FT
    }

    -----------------------

    Den Code als "Get-MailboxFolderPermissionsForAllFolders.ps1" speichern und auf dem Exchange Server ausführen.

    Ich hoffe, es hilft weiter...

    Schöne Grüße aus Isernhagen

    Andreas Ohlendorf

    Freitag, 27. Mai 2016 16:05

Alle Antworten

  • Hallo Davorin,

    das können Sie mit Get-MailboxPermissions und Get-ADPermissions auslesen.

    Gruß,

    Teodora


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Freitag, 27. Mai 2016 06:26
    Moderator
  • Hallo Theodora,

    mit Get-MailBoxPermissions bekomme ich nur die generellen Rechte auf komplette Postfächer angezeigt (Fukll Access u.ä.), keine Berechtigungen auf die Unterordner.
    Get-ADPermission liefert nur die Berechtigung auf die Datenbank, nicht auf die Postfächer.

    Get-MaiBox -ResultSize Unlimited | GetMailboxFolderPermission liefert augenscheinlich nicht alle Ordner/Unterordner aller Mailboxen.

    Get-Mailbox -ResultSize Unlimited | Get-MailboxFolder wirft nur Fehler:
    ***
    Cannot open mailbox /o=First Organization/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=25f3508feda043e697adb9006ea5f770-Gesam
    ***

    Freitag, 27. Mai 2016 08:10
  • Moin,

    Get-MailboxPermission MAILBOX -> liefert Vollzugriff auf das Postfach

    Get-AdPermission MAILBOX-DN -> liefert Send As Berechtigung auf das Postfach

    Get-MailFolderPermission MAILBOXNAME\FOLDERNAME -> liefert die Ordner-Berechtigungen auf genau EINEN Ordner

    Leider kennt MailboxFolderPermission keine Rekursion, d.h. hier muss man sich mit einem via Get-MailboxFolderStatistics (!!!) behelfen:

    Beispiel: http://serverfault.com/questions/333964/permission-mailbox-subfolders

    Leider ist da keine Pipeline möglich, da die CMDLETs keine kompatiblen Parameter austauschen, d.h. es muss eine Schleife programmiert werden.

    Get-MailboxFolder geht nicht, da dies im Standard laut RBAC nur der Mailbox-Owner ausführen darf. Das CMDLET wird technisch für OWA gebraucht.


    Gruesse aus Berlin schickt Robert - MVP Office Servers and Services (Exchange Server)

    Freitag, 27. Mai 2016 10:06
  • Moin,

    versuchen Sie es mit folgendem Script - evtl. die Ausgabe statt "FT" in der vorletzten Zeile anpassen:

    -----------------------

    # Code to get mailbox # folder permissions for all folders in
    # a mailbox.
    #
    # Example:
    #   Get-MailboxFolderPermissionsForAllFolders -Mailbox egon.tester@company.com -User liese.mueller@company.com
    [CmdletBinding()]
    param (
     [Parameter( Mandatory=$true)]
     [string]$Mailbox,
       
     [Parameter( Mandatory=$true)]
     [string]$User,
       
    )
    # Liste der Ordner, die nicht bearbeitet werden:
    $exclusions = @("/Sync Issues",
                    "/Sync Issues/Conflicts",
                    "/Sync Issues/Local Failures",
                    "/Sync Issues/Server Failures",
                    "/Recoverable Items",
                    "/Deletions",
                    "/Purges",
                    "/Versions",
      "/Synchronisierungsprobleme",
      "/Synchronisierungsprobleme/Konflikte",
      "/Synchronisierungsprobleme/Lokale Fehler",
      "/Synchronisierungsprobleme/Serverfehler",
      "/Gelöschte Elemente"
                    )

    # Read list of mailbox folders, exclude above listed folders
    $mailboxfolders = @(Get-MailboxFolderStatistics $Mailbox | Where {!($exclusions -icontains $_.FolderPath)} | Select FolderPath)
    # Loop over all folders
    foreach ($mailboxfolder in $mailboxfolders)
    {
        $folder = $mailboxfolder.FolderPath.Replace("/","\")
        if (($folder -match "Top of Information Store") -or ($folder -match "Oberste Ebene des Informationsspeichers"))
        {
           $folder = $folder.Replace("\Top of Information Store","\")
           $folder = $folder.Replace("\Oberste Ebene des Informationsspeichers","\")
        }
        $identity = "$($mailbox):$folder"
        # Get folder permission
        Write-Host "Reading permissions for $user to $identity" -ForeGroundColor Green
        Get-MailboxFolderPermission -Identity $identity -User $user -ErrorAction SilentlyContinue | FT
    }

    -----------------------

    Den Code als "Get-MailboxFolderPermissionsForAllFolders.ps1" speichern und auf dem Exchange Server ausführen.

    Ich hoffe, es hilft weiter...

    Schöne Grüße aus Isernhagen

    Andreas Ohlendorf

    Freitag, 27. Mai 2016 16:05
  • Und dann noch in eine Schleife packen, damit man wirklich die Rechte auf *allen* Postfächern rausbekommt ;-)

    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de
    my personal blog (mostly German) -> http://it-pro-berlin.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    In theory, there is no difference between theory and practice. In practice, there is.

    Freitag, 27. Mai 2016 16:34
  • Geiles Skript!
    Macht genau das, was ich brauche, super!

    Ich bau dann noch die Schleife ein, von der Evgenij schrieb und ich habe ein sher mächtiges und hilfreiches Skript.

    Vielen Dank an euch alle!

    Montag, 30. Mai 2016 07:30
  • Danke Robert, für die Erläuterungen, welcher Befehl was ausgibt :-)
    Montag, 30. Mai 2016 07:30
  • Servus Evgenij, du konntest mir schon einige Male helfen - ich hoffe, auch hier :)

    Der Thread ist zwar schon etwas älter, aber du bist sicher noch dabei. Wie kann ich deinen Hinweis "alles in eine Schleife packen" verstehen? Wie würde eine solche Schleife aussehen und welche Vorteile hätte sie gegenüber dem originären Script?

    Danke schon mal vorab - bin aber in machen Dingen noch Newbie

    Gruß Ingo

    Montag, 18. Juli 2022 08:50
  • Moin,

    der veröffentlichte Code untersucht ja nur eine Mailbox. Die ursprüngliche Aufgabe lautete "Berechtigungen auf allen Mailboxen auslesen" - daher muss man den Code für eine Mailbox in einer Schleife sukzessive auf jede Mailbox anwenden.


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Montag, 18. Juli 2022 08:59
  • Hallo Andreas, auch wenn der Thread schon einige Zeit her ist, hoffe ich, Sie können mir helfen, denn das hier ist genau was ich suche.

    Mein Problem beim Ausführen ist, dass ich bei [CmdletBinding()] die Meldung "unerwartetes Attribut" und gleich in der Folge bei param ( "Unerwartetes Token param in Ausdruck oder Anweisung" erhalte.

    Ich bin leider nicht der große Shellspezialist, sodass ich auch bei GOOGLE nichts finden konnte, welches mein Problem löst.

    Das Script wurde ich gerne auf einem EX2012 auf Basis 2016 Standard-Server ausführen.

    Danke schon mal vorab.

    Beste Grüße

    Ingo

    Montag, 18. Juli 2022 09:16
  • Dann ist Dir beim Kopieren des PowerShell-Code ein Fehler unterlaufen. Manchmal verschluckt das Forum aber auch Zeichen oder fügt unsichtbar welchen hinzu. Aus diesem Grund sollte man in Foren auch immer Code als Code posten und nicht als Fließtext.

    Evgenij Smirnov

    http://evgenij.smirnov.de

    Montag, 18. Juli 2022 09:29