Public/Get-ExoSendOnBehalfReport.ps1
function Get-ExoSendOnBehalfReport { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [string]$Path ) try { # Connect to Exchange Online "connecting to Exchange Online" Connect-ExchangeOnline } catch { Write-Error -Message "Failed to connect to Exchange Online: $_" return } try { $Parent = Split-Path -Path $Path -Parent if (-not (Test-Path -Path $Parent)) { Write-Error -Message "The base path of the specified path does not exist: $Parent" return } } catch { Write-Error -Message "Failed to check the specified path: $_" return } $mailboxes = (Get-Mailbox -ResultSize Unlimited | Where-Object { $null -ne $_.GrantSendOnBehalfTo }) $result = @() foreach ($mbx in $mailboxes) { foreach ($s in $mbx.GrantSendOnBehalfTo) { $m = Get-Mailbox -Identity $s if ($null -ne $m) { $result += [PSCustomObject]@{ MailboxAddress = $mbx.PrimarySmtpAddress Identity = $mbx.Identity DisplayName = $mbx.DisplayName SendOnBehalfIdentity = $m.Identity SendOnBehalfMailboxAddress = $m.PrimarySmtpAddress SendOnBehalfDisplayName = $m.DisplayName } } } } $result | Export-Csv -Path $Path -NoTypeInformation -Encoding UTF8 -Confirm:$false } |