Get-MailboxPermissionsReport.ps1

something exciting

Some information about the exciting thing

Table of contents generated with markdown-toc


Script

<#
    .SYNOPSIS
    Dump mailbox folder permissions to CSV file

       Thomas Stensitzki

    THIS CODE IS MADE AVAILABLE AS IS, WITHOUT WARRANTY OF ANY KIND. THE ENTIRE
    RISK OF THE USE OR THE RESULTS FROM THE USE OF THIS CODE REMAINS WITH THE USER.

    Version 1.1, 2016-08-30

    Ideas, comments and suggestions to [email protected]

    This script is based on Mr Tony Redmonds blog post http://thoughtsofanidlemind.com/2014/09/05/reporting-delegate-access-to-exchange-mailboxes/

    .LINK
    More information can be found at http://www.granikos.eu/en/scripts

    .DESCRIPTION
    This script exports all mailbox folder permissions for mailboxes of type "UserMailbox".

    The permissions are exported to a local CSV file

    The script is inteded to run from within an active Exchange 2013 Management Shell session.

    .NOTES
    Requirements
    - Windows Server 2012 or Windows Server 2012 R2

    Revision History
    --------------------------------------------------------------------------------
    1.0     Initial community release
    1.1     Minor PowerShell fix

    .PARAMETER CsvFileName
    CSV file name

    .EXAMPLE
    Export mailbox permissions to export.csv

    .\Get-MailboxPermissionsReport-ps1 -CsvFileName export.csv

#>
Param(
    [parameter(Mandatory = $false, ValueFromPipeline = $false, HelpMessage = 'CSV file name')]
    [string]$CsvFileName = 'MailboxPermissions.csv'
)

$ScriptDir = Split-Path $script:MyInvocation.MyCommand.Path
$ScriptName = $MyInvocation.MyCommand.Name

$OutputFile = Join-Path $ScriptDir -ChildPath $CsvFileName

Write-Verbose $OutputFile

# Fetch mailboxes of type UserMailbox only
$Mailboxes = Get-Mailbox -RecipientTypeDetails 'UserMailbox' -ResultSize Unlimited | Sort-Object

$result = @()

# counter for progress bar
$MailboxCount = ($Mailboxes | Measure-Object).Count
$count = 1

ForEach ($Mailbox in $Mailboxes) {
    $Alias = '' + $Mailbox.Name
    $DisplayName = "$($Mailbox.DisplayName) ($($Mailbox.Name))"

    $activity = "Working... [$($count)/$($mailboxCount)]"
    $status = "Getting folders for mailbox: $($DisplayName)"
    Write-Progress -Status $status -Activity $activity -PercentComplete (($count / $MailboxCount) * 100)

    # Fetch fodlers
    $Folders = Get-MailboxFolderStatistics $Alias | % { $_.folderpath } | % { $_.replace('/', '\') }

    ForEach ($Folder in $Folders) {
        $FolderKey = $Alias + ':' + $Folder
        $Permissions = Get-MailboxFolderPermission -identity $FolderKey -ErrorAction SilentlyContinue
        $result += $Permissions | Where-Object { $_.User -notlike 'Default' -and $_.User -notlike 'Anonymous' -and $_.AccessRights -notlike 'None' -and $_.AccessRights -notlike 'Owner' } | Select-Object @{name = 'Mailbox'; expression = { $DisplayName } }, FolderName, @{name = 'User'; expression = { $_.User -join ',' } }, @{name = 'AccessRights'; expression = { $_.AccessRights -join ',' } }
    }
    # Increment counter
    $count++
}

# Export to CSV
$result | Export-Csv -Path $OutputFile -NoTypeInformation -Encoding UTF8 -Delimiter ';' -Force

Back to Top


Download

Please feel free to copy parts of the script or if you would like to download the entire script, simple click the download button. You can download the complete repository in a zip file by clicking the Download link in the menu bar on the left hand side of the page.


Report Issues

You can report an issue or contribute to this site on GitHub. Simply click the button below and add any relevant notes. I will attempt to respond to all issues as soon as possible.

Issue


Back to Top