Public/Permissions/Get-DGSendAsPerms.ps1

function Get-DGSendAsPerms {
    <#
    .SYNOPSIS
    Outputs Send As 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-SendAsPerms | Export-csv .\SA.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] $ADHashDGDN,
        
        [parameter()]
        [hashtable] $ADHashDG
    )
    Begin {
        Try {
            import-module activedirectory -ErrorAction Stop -Verbose:$false
        }
        Catch {
            Write-Host "This module depends on the ActiveDirectory module."
            Write-Host "Please download and install from https://www.microsoft.com/en-us/download/details.aspx?id=45520"
            throw
        }
    }
    Process {
        ForEach ($curDN in $DistinguishedName) {
            $DG = $curDN
            Write-Verbose "Inspecting Group: `t $DG"
            Get-ADPermission $curDN | Where-Object {
                $_.ExtendedRights -like "*Send-As*" -and 
                ($_.IsInherited -eq $false) -and 
                !($_.User -like "NT AUTHORITY\SELF") -and 
                !($_.User.tostring().startswith('S-1-5-21-'))
            } | ForEach-Object {
                $User = $_.User
                Write-Verbose "Has Send As: `t $User"
                New-Object -TypeName PSObject -property @{
                    Object      = $ADHashDGDN["$DG"].DisplayName
                    PrimarySMTP = $ADHashDGDN["$DG"].PrimarySMTPAddress
                    Granted     = $ADHashDG["$User"].DisplayName
                    GrantedUPN  = $ADHashDG["$User"].UserPrincipalName
                    GrantedSMTP = $ADHashDG["$User"].PrimarySMTPAddress
                    Permission  = "SendAs"  
                }
            } 
        }
    }
    END {
        
    }
}