Entra / Microsoft 365 · Exchange Online
Report all email proxy addresses
A script to report all the proxy addresses assigned to mail-enabled objects in the organization.
Connect & set up
Run these once per session. All scopes are read-only unless the script makes changes.
Connect-ExchangeOnline
Run it
The main script. Copy it, or download the .ps1 and run it from your console.
If ($Null -eq (Get-ConnectionInformation)) {Connect-ExchangeOnline}$CSVOutputFile = "C:\Temp\EmailProxyAddresses.csv"$Report = [System.Collections.Generic.List[Object]]::new() # Create output file for report# First, let's do mailboxesWrite-Host "Fetching details of user, shared, equipment, and room mailboxes..."[array]$Mbx = Get-ExoMailbox -ResultSize Unlimited -RecipientTypeDetails UserMailbox, SharedMailbox, RoomMailbox, EquipmentMailboxWrite-Host ("Processing details for {0} mailboxes..." -f $Mbx.count)ForEach ($M in $Mbx) {ForEach ($Address in $M.EMailAddresses) {$AddressType = $Address.Split(":")[0]$AddressProxy = $Address.Split(":")[1]If ($AddressType -eq 'smtp') {$ReportLine = [PSCustomObject]@{ProxyAddress = $AddressProxyName = $M.DisplayNameUPN = $M.userPrincipalNameObjectId = $M.ExternalDirectoryObjectIdType = $M.RecipientTypeDetails}$Report.Add($ReportLine)}}}# Now let's do group mailboxesWrite-Host "Fetching details of group mailboxes..."[array]$GroupMailboxes = Get-UnifiedGroup -ResultSize UnlimitedWrite-Host ("Processing details of {0} group mailboxes" -f $GroupMailboxes.count)ForEach ($Gmbx in $GroupMailboxes) {ForEach ($Address in $Gmbx.EMailAddresses) {$AddressType = $Address.Split(":")[0]$AddressProxy = $Address.Split(":")[1]If ($AddressType -eq 'smtp') {$ReportLine = [PSCustomObject]@{ProxyAddress = $AddressProxyName = $Gmbx.DisplayNameUPN = $Gmbx.primarySmtpAddressObjectId = $Gmbx.ExternalDirectoryObjectIdType = "Group Mailbox"}$Report.Add($ReportLine)}}}# Mail-enabled public foldersWrite-Host "Fetching details of mail-enabled public folders..."[array]$PFs = Get-MailPublicFolder -ResultSize UnlimitedIf ($PFs) {Write-Host ("Processing details for {0} mail-enabled public folders..." -f $PFs.Count)ForEach ($PF in $PFs) {ForEach ($Address in $PF.EMailAddresses) {$AddressType = $Address.Split(":")[0]$AddressProxy = $Address.Split(":")[1]If ($AddressType -eq 'smtp') {$ReportLine = [PSCustomObject]@{ProxyAddress = $AddressProxyName = $PF.DisplayNameUPN = $PF.primarySmtpAddressObjectId = "N/A"Type = "Public folder"}$Report.Add($ReportLine)}}}}# Distribution listsWrite-Host "Fetching details of distribution lists..."[array]$DLs = Get-DistributionGroup -ResultSize UnlimitedIf ($DLs) {Write-Host ("Processing details for {0} distribution lists..." -f $DLs.Count)ForEach ($DL in $DLs) {ForEach ($Address in $DL.EMailAddresses) {$AddressType = $Address.Split(":")[0]$AddressProxy = $Address.Split(":")[1]If ($AddressType -eq 'smtp') {$ReportLine = [PSCustomObject]@{ProxyAddress = $AddressProxyName = $DL.DisplayNameUPN = $DL.primarySmtpAddressObjectId = $DL.ExternalDirectoryObjectIdType = "Distribution list"}$Report.Add($ReportLine)}}}}# Dynamic distribution listsWrite-Host "Fetching details of dynamic distribution lists..."[array]$DDLs = Get-DynamicDistributionGroup -ResultSize UnlimitedIf ($DDLs) {Write-Host ("Processing details for {0} dynamic distribution lists..." -f $DLs.Count)ForEach ($DDL in $DDLs) {ForEach ($Address in $DDL.EMailAddresses) {$AddressType = $Address.Split(":")[0]$AddressProxy = $Address.Split(":")[1]If ($AddressType -eq 'smtp') {$ReportLine = [PSCustomObject]@{ProxyAddress = $AddressProxyName = $DDL.DisplayNameUPN = $DDL.primarySmtpAddressObjectId = 'N/A'Type = "Dynamic Distribution list"}$Report.Add($ReportLine)}}}}$Report = $Report | Sort-Object UPN$Report | Export-CSV -NoTypeInformation $CSVOutputFileWrite-Host ("Output file is available in {0}" -f $CSVOutputFile)
Attribution
Author
Office365itpros