Public/Exchange/Mailbox/Get/Get-ExMailboxOnMicrosoftAddress.ps1
|
<#
.SYNOPSIS Lists Exchange Online mailboxes with an @onmicrosoft.com email address .DESCRIPTION Retrieves Exchange Online mailboxes that have an email address ending with @onmicrosoft.com. Returns an object for each mailbox with relevant details. .EXAMPLE Get-ExMailboxOnMicrosoftAddress Returns objects containing mailbox details for those with @onmicrosoft.com addresses. .EXAMPLE Get-ExMailboxOnMicrosoftAddress -ByDomain "contoso.com" Returns mailboxes with @onmicrosoft.com addresses filtered by the specified domain. .EXAMPLE Get-ExMailboxOnMicrosoftAddress -Identity "user@contoso.com" Returns the @onmicrosoft.com address for the specified mailbox identity. .EXAMPLE $mailboxes | Get-ExMailboxOnMicrosoftAddress #> function Get-ExMailboxOnMicrosoftAddress { [CmdletBinding()] param ( [Parameter(Mandatory = $false, Position = 0, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] [string[]]$Identity, [Parameter(Mandatory = $false)] [string]$ByDomain ) begin { Write-Verbose 'Starting Get-ExMailboxOnMicrosoftAddress' [System.Collections.Generic.List[PSCustomObject]]$mailboxes = @() [System.Collections.Generic.List[PSCustomObject]]$results = @() [System.Collections.Generic.List[string]]$orderedIdentities = @() } process { if ($Identity) { foreach ($id in $Identity) { $orderedIdentities.Add($id) try { Write-Verbose "Getting mailbox: $id" $mailbox = Get-EXOMailbox -Identity $id -ErrorAction Stop $mailboxes.Add($mailbox) } catch { Write-Warning "Mailbox not found: $id" # Add placeholder for non-existent mailbox $mailboxes.Add([PSCustomObject]@{ PrimarySmtpAddress = $id DisplayName = $null ExchangeObjectId = $null EmailAddresses = @() NotFound = $true }) } } } } end { # Get mailboxes if not from pipeline if ($mailboxes.Count -eq 0) { if ($ByDomain) { Write-Verbose "Getting mailboxes for domain: $ByDomain" $mailboxes = Get-EXOMailbox -ResultSize Unlimited -Filter "EmailAddresses -like '*@$ByDomain'" | Where-Object { $_.PrimarySmtpAddress -like "*@$ByDomain" } } else { Write-Verbose 'Getting all mailboxes' $mailboxes = Get-EXOMailbox -ResultSize Unlimited } } Write-Host -ForegroundColor Cyan "Searching $($mailboxes.Count) mailbox(es) for @*.onmicrosoft.com addresses..." # If we have ordered identities, process in that order if ($orderedIdentities.Count -gt 0) { foreach ($id in $orderedIdentities) { $mailbox = $mailboxes | Where-Object { $_.PrimarySmtpAddress -eq $id } if ($mailbox.NotFound) { # Mailbox doesn't exist $object = [PSCustomObject][ordered]@{ PrimarySmtpAddress = $id DisplayName = $null ExchangeObjectId = $null OnMicrosoftAddress = $null } $results.Add($object) } else { $onMicrosoftAddresses = $mailbox.EmailAddresses | Where-Object { $_ -like '*.onmicrosoft.com' } if ($onMicrosoftAddresses) { foreach ($email in $onMicrosoftAddresses) { $cleanEmail = $email -replace '^(SMTP|smtp):', '' $object = [PSCustomObject][ordered]@{ PrimarySmtpAddress = $mailbox.PrimarySmtpAddress DisplayName = $mailbox.DisplayName ExchangeObjectId = $mailbox.Id OnMicrosoftAddress = $cleanEmail } $results.Add($object) Write-Host -ForegroundColor Green "Found: $cleanEmail ($($mailbox.PrimarySmtpAddress))" } } else { # No onmicrosoft.com address found $object = [PSCustomObject][ordered]@{ PrimarySmtpAddress = $mailbox.PrimarySmtpAddress DisplayName = $mailbox.DisplayName ExchangeObjectId = $mailbox.Id OnMicrosoftAddress = $null } $results.Add($object) } } } } else { # Process all mailboxes (no specific order required) foreach ($mailbox in $mailboxes) { $onMicrosoftAddresses = $mailbox.EmailAddresses | Where-Object { $_ -like '*.onmicrosoft.com' } if ($onMicrosoftAddresses) { foreach ($email in $onMicrosoftAddresses) { $cleanEmail = $email -replace '^(SMTP|smtp):', '' $object = [PSCustomObject][ordered]@{ PrimarySmtpAddress = $mailbox.PrimarySmtpAddress DisplayName = $mailbox.DisplayName ExchangeObjectId = $mailbox.Id OnMicrosoftAddress = $cleanEmail } $results.Add($object) Write-Host -ForegroundColor Green "Found: $cleanEmail ($($mailbox.PrimarySmtpAddress))" } } else { # No onmicrosoft.com address found $object = [PSCustomObject][ordered]@{ PrimarySmtpAddress = $mailbox.PrimarySmtpAddress DisplayName = $mailbox.DisplayName ExchangeObjectId = $mailbox.Id OnMicrosoftAddress = $null } $results.Add($object) } } } return $results } } |