Private/Migration/CloudData/Invoke-GetCloudData.ps1
function Invoke-GetCloudData { [CmdletBinding()] param ( [Parameter()] $ResultSize = 'Unlimited', [Parameter()] [ValidateSet('Mailboxes', 'MailUsers', 'AzureADUsers')] $Type, [Parameter()] [ValidateNotNullOrEmpty()] $InitialDomain ) $iUP = 0 if ($Type -eq 'Mailboxes') { $MailboxList = Get-Mailbox -Filter "IsDirSynced -eq '$false'" -RecipientTypeDetails UserMailbox, SharedMailbox, RoomMailbox, EquipmentMailbox -ResultSize $ResultSize $Count = @($MailboxList).Count foreach ($Mailbox in $MailboxList) { $iUP++ [PSCustomObject]@{ Num = '[{0} of {1}]' -f $iUP, $Count DisplayName = $Mailbox.DisplayName Name = $Mailbox.Name Type = 'Recipient' RecipientType = $Mailbox.RecipientType RecipientTypeDetails = $Mailbox.RecipientTypeDetails UserPrincipalName = $Mailbox.UserPrincipalName ExternalEmailAddress = $Mailbox.ExternalEmailAddress Alias = $Mailbox.Alias PrimarySmtpAddress = $Mailbox.PrimarySmtpAddress ExchangeGuid = $Mailbox.ExchangeGuid ArchiveGuid = $Mailbox.ArchiveGuid LegacyExchangeDN = $Mailbox.LegacyExchangeDN MicrosoftOnlineServicesID = $Mailbox.MicrosoftOnlineServicesID InitialAddress = @($Mailbox.EmailAddresses -like "smtp:*@$InitialDomain")[0] -replace 'smtp:', '' EmailAddresses = @($Mailbox.EmailAddresses) -notmatch "SPO:|SIP:|onmicrosoft\.com" -join '|' ExternalDirectoryObjectId = $Mailbox.ExternalDirectoryObjectId } } } if ($Type -eq 'MailUsers') { $MailUserList = (Get-MailUser -Filter "IsDirSynced -eq '$false'" -ResultSize $ResultSize).where{ $_.UserPrincipalName -notlike "*#EXT#*" } $Count = @($MailUserList).Count foreach ($MailUser in $MailUserList) { $iUP++ [PSCustomObject]@{ Num = '[{0} of {1}]' -f $iUP, $Count DisplayName = $MailUser.DisplayName Name = $MailUser.Name Type = 'Recipient' RecipientType = $MailUser.RecipientType RecipientTypeDetails = $MailUser.RecipientTypeDetails UserPrincipalName = $MailUser.UserPrincipalName ExternalEmailAddress = $MailUser.ExternalEmailAddress Alias = $MailUser.Alias PrimarySmtpAddress = $MailUser.PrimarySmtpAddress ExchangeGuid = $MailUser.ExchangeGuid ArchiveGuid = $MailUser.ArchiveGuid LegacyExchangeDN = $MailUser.LegacyExchangeDN MicrosoftOnlineServicesID = $MailUser.MicrosoftOnlineServicesID InitialAddress = if ($InitialAddress = ($MailUser.EmailAddresses -like "smtp:*@$InitialDomain")[0] -replace 'smtp:', '') { $InitialAddress } else { '{0}@{1}' -f ($MailUser.UserPrincipalName -split '@')[0], $InitialDomain } EmailAddresses = @($MailUser.EmailAddresses) -notmatch "SPO:|SIP:" -join '|' ExternalDirectoryObjectId = $MailUser.ExternalDirectoryObjectId } } } if ($Type -eq 'AzureADUsers') { $RecipientGuidSet = [System.Collections.Generic.HashSet[string]]::new() $RecipientList = Get-Recipient -ResultSize unlimited $RecipientList | ForEach-Object { $null = $RecipientGuidSet.Add(($_.ExternalDirectoryObjectId).ToString()) } $AzureADUserList = Get-AzureADUser -All:$True | Where-Object { $_.DisplayName -ne 'On-Premises Directory Synchronization Service Account' -and (-not $_.ImmutableId) -and $_.UserPrincipalName -notlike "*#EXT#*" -and -not $RecipientGuidSet.Contains($_.ObjectId.ToString()) } $Count = @($AzureADUserList).Count foreach ($AzureADUser in $AzureADUserList) { $iUP++ [PSCustomObject]@{ Num = '[{0} of {1}]' -f $iUP, $Count DisplayName = $AzureADUser.DisplayName Type = 'AzureADUser' MailNickName = $AzureADUser.MailNickName UserPrincipalName = $AzureADUser.UserPrincipalName PrimarySmtpAddress = @(@($AzureADUser.ProxyAddresses ) -cmatch 'SMTP:') -ne '' -join '|' InitialAddress = ($AzureADUser.ProxyAddresses -like "smtp:*@$InitialDomain")[0] -replace 'smtp:', '' EmailAddresses = @(@($AzureADUser.ProxyAddresses) -notmatch "SPO:|SIP:") -ne '' -join '|' ObjectId = $AzureADUser.ObjectId } } } } |