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