Get-MailboxPermissionsReport.ps1


Description

@GitHub Copilot - Welcome @BanterBoy, I’m your Copilot and I’m here to help you get things done faster. I can identify issues, explain and even improve code.

You can ask generic questions, but what I’m really good at is helping you with your code. For example:

Generate unit tests for my code Explain the selected code Propose a fix for the bugs in my code If you want to learn more about my capabilities and limitations, check out the Copilot documentation.

I’m powered by AI, so surprises and mistakes are possible. Make sure to verify any generated code or suggestions, and share feedback so that we can learn and improve.

@BanterBoy: - Explain what the script does and why it is useful.

@GitHub Copilot -


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