Public/Permissions/EXO/Get-EXOFullAccessPerms.ps1

function Get-EXOFullAccessPerms {
    <#
    .SYNOPSIS
    Outputs Full Access permissions for each mailbox that has permissions assigned.
    This is for On-Premises Exchange 2010, 2013, 2016+
     
    .EXAMPLE
     
    (Get-Mailbox -ResultSize unlimited | Select -expandproperty distinguishedname) | Get-EXOFullAccessPerms | Export-csv .\FA.csv -NoTypeInformation
 
    If not running from Exchange Management Shell (EMS), run this first:
 
    Connect-Exchange -NoPrefix
     
    #>

    [CmdletBinding()]
    Param (
        [parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
        $DistinguishedName,
        [parameter()]
        [hashtable] $DGHash,
        [parameter()]
        [hashtable] $ADHash
    )
    Begin {
        
        

    }
    Process {
        ForEach ($curDN in $DistinguishedName) {
            $mailbox = $curDN
            Get-MailboxPermission $curDN |
                Where-Object {
                $_.AccessRights -like "*FullAccess*" -and 
                !$_.IsInherited -and !$_.user.tostring().startswith('S-1-5-21-') -and 
                !$_.user.tostring().startswith('NT AUTHORITY\SELF')
            } | ForEach-Object {
                $User = $_.User
                if ($DGHash.containskey($_.User)) {
                    $DGHash[$_.User].value | ForEach-Object {
                        New-Object -TypeName psobject -property @{
                            Mailbox     = $mailbox.Name
                            PrimarySMTP = $mailbox.primarysmtpaddress
                            Granted     = $ADHashDN[$_.distinguishedname].DisplayName
                            GrantedUPN  = $ADHashDN[$_.distinguishedname].UPN
                            Permission  = "FullAccess"
                        }  
                    }
                }
                else {
                    New-Object -TypeName psobject -property @{
                        Mailbox    = $ADHashDN.$mailbox.DisplayName
                        UPN        = $ADHashDN.$mailbox.UPN
                        Granted    = $ADHash[$User].DisplayName
                        GrantedUPN = $ADHash.$User.UPN
                        Permission = "FullAccess"
                    }  
                }
            }
        }
    }
    END {
        
    }
}