# Output file $OutputFile = "MailboxPermissionsWithSMTPAndName.csv" # Initialize an array for the results $Results = @() # Retrieve all mailboxes (all types) $Mailboxes = Get-Mailbox -RecipientTypeDetails UserMailbox,SharedMailbox -ResultSize Unlimited # Loop through all mailboxes foreach ($Mailbox in $Mailboxes) { # Retrieve the primary SMTP address and display name $PrimarySmtpAddress = $Mailbox.PrimarySmtpAddress $DisplayName = $Mailbox.DisplayName # Retrieve mailbox permissions $Permissions = Get-MailboxPermission -Identity $Mailbox.Identity # Check if specific permissions are set if ($Permissions.Count -eq 0) { # Add mailbox without additional permissions $Results += [PSCustomObject]@{ DisplayName = $DisplayName MailboxType = $Mailbox.RecipientTypeDetails PrimarySmtpAddress = $PrimarySmtpAddress User = "Default owner" AccessRights = "FullAccess" IsInherited = "N/A" } } else { # Add permissions foreach ($Permission in $Permissions) { # Filter default permissions such as NT AUTHORITY\SELF if ($Permission.User -notlike "NT AUTHORITY\SELF") { $Results += [PSCustomObject]@{ DisplayName = $DisplayName MailboxType = $Mailbox.RecipientTypeDetails PrimarySmtpAddress = $PrimarySmtpAddress User = $Permission.User AccessRights = $Permission.AccessRights -join ", " IsInherited = $Permission.IsInherited } } } } } # Add mailboxes that may not have displayed permissions foreach ($Mailbox in $Mailboxes) { if (-not ($Results.DisplayName -contains $Mailbox.DisplayName)) { $Results += [PSCustomObject]@{ DisplayName = $Mailbox.DisplayName MailboxType = $Mailbox.RecipientTypeDetails PrimarySmtpAddress = $Mailbox.PrimarySmtpAddress User = "Default owner" AccessRights = "FullAccess" IsInherited = "N/A" } } } # Export the results to a CSV file $Results | Export-Csv -Path $OutputFile -NoTypeInformation -Encoding UTF8 Write-Host "All mailboxes, permissions, names, and SMTP addresses have been exported to $OutputFile"