Open Juergen100 opened 4 years ago
I see, it's the ExcludeSharedMailboxContacts parameter in the function Get-GALContacts.ps1. This also exclude all users without an Exchange Online mailbox and not only shared mailboxes.
Juergen100,
I'll update the ExcludeSharedMailboxContacts switch and documentation to provide better clarity. Did removing the switch take care of your issue?
grahamr975,
Yes, without the ExcludeSharedMailboxContacts switch I get all users, unfortunately also the shared mailboxes. I have experimented with something and found the following:
If i change in the Get-GALContacts.ps1 script the code to
# Import Global Address List into Powershell from Office 365 Exchange as an array
$ContactList = Get-User -Filter {WindowsEmailAddress -ne $null} -ResultSize unlimited | Where-Object {$_.RecipientTypeDetails -eq 'UserMailbox' -or $_.RecipientTypeDetails -eq 'MailUser'} | Select-Object DisplayName,FirstName,LastName,Title,Company,Department,WindowsEmailAddress,Phone,MobilePhone
and start the batch without the ExcludeSharedMailboxContacts switch it works and I get all users.
If i change in the Get-GALContacts.ps1 script the code to
# Import Global Address List into Powershell from Office 365 Exchange as an array
$ContactList = Get-User -Filter {WindowsEmailAddress -ne $null} -ResultSize unlimited | Select-Object DisplayName,FirstName,LastName,Title,Company,Department,WindowsEmailAddress,Phone,MobilePhone
# If the ExcludeSharedMailboxContacts switch is enabled, exclude contacts that are a shared mailbox
if ($ExcludeSharedMailboxContacts) {
$ContactList = $ContactList | Where-Object {$_.RecipientTypeDetails -eq 'UserMailbox' -or $_.RecipientTypeDetails -eq 'MailUser'}
}
and start the batch with the ExcludeSharedMailboxContacts switch it dosen't work and I get no users. I have no clue why.
Thanks Juergen
In your second example, 'Select-Object' on line 2 removes the 'RecipientTypeDetails' property from the ContactList array. So, when you check for 'UserMailbox' or 'MailUser' later, nothing is returned. Could you try the below code?
# Import Global Address List into Powershell from Office 365 Exchange as an array
$ContactList = Get-User -Filter {WindowsEmailAddress -ne $null} -ResultSize unlimited
# If the ExcludeSharedMailboxContacts switch is enabled, exclude contacts that are a shared mailbox
if ($ExcludeSharedMailboxContacts) {
$ContactList = $ContactList | Where-Object {$_.RecipientTypeDetails -eq 'UserMailbox' -or $_.RecipientTypeDetails -eq 'MailUser'}
}
$ContactList = $ContactList | Select-Object DisplayName,FirstName,LastName,Title,Company,Department,WindowsEmailAddress,Phone,MobilePhone
I tried your code, now I get users but but unfortunately again only those with mailboxes.
It seems that the filter
{$_.RecipientTypeDetails -eq 'UserMailbox' -or $_.RecipientTypeDetails -eq 'MailUser'}
is not considered.
The same with the filter
{$_.RecipientTypeDetails -ne 'SharedMailbox'}
Didn't you say that your first example worked fine for you? My above code should be functionally identical to that...
# Import Global Address List into Powershell from Office 365 Exchange as an array
$ContactList = Get-User -Filter {WindowsEmailAddress -ne $null} -ResultSize unlimited | Where-Object {$_.RecipientTypeDetails -eq 'UserMailbox' -or $_.RecipientTypeDetails -eq 'MailUser'} | Select-Object DisplayName,FirstName,LastName,Title,Company,Department,WindowsEmailAddress,Phone,MobilePhone
Can you try to it without "-Filter {WindowsEmailAddress -ne $null}"? I believe that this excludes non-mailboxes. See below.
# Import Global Address List into Powershell from Office 365 Exchange as an array
$ContactList = Get-User -ResultSize unlimited
# If the ExcludeSharedMailboxContacts switch is enabled, exclude contacts that are a shared mailbox
if ($ExcludeSharedMailboxContacts) {
$ContactList = $ContactList | Where-Object {$_.RecipientTypeDetails -eq 'UserMailbox' -or $_.RecipientTypeDetails -eq 'MailUser'}
}
$ContactList = $ContactList | Select-Object DisplayName,FirstName,LastName,Title,Company,Department,WindowsEmailAddress,Phone,MobilePhone
If this still does not work, you can try without "-Filter {WindowsEmailAddress -ne $null}" AND using the "{$_.RecipientTypeDetails -ne 'SharedMailbox'} filter."
# Import Global Address List into Powershell from Office 365 Exchange as an array
$ContactList = Get-User -ResultSize unlimited
# If the ExcludeSharedMailboxContacts switch is enabled, exclude contacts that are a shared mailbox
if ($ExcludeSharedMailboxContacts) {
$ContactList = $ContactList | Where-Object {$_.RecipientTypeDetails -ne 'SharedMailbox'}
}
$ContactList = $ContactList | Select-Object DisplayName,FirstName,LastName,Title,Company,Department,WindowsEmailAddress,Phone,MobilePhone
During my last test I have made a programming error. With this code the switch works as expected:
# Import Global Address List into Powershell from Office 365 Exchange as an array
$ContactList = Get-User -Filter {WindowsEmailAddress -ne $null} -ResultSize unlimited
# If the ExcludeSharedMailboxContacts switch is enabled, exclude contacts that are a shared mailbox
if ($ExcludeSharedMailboxContacts) {
$ContactList = $ContactList | Where-Object {$_.RecipientTypeDetails -ne 'SharedMailbox'}
}
$ContactList = $ContactList | Select-Object DisplayName,FirstName,LastName,Title,Company,Department,WindowsEmailAddress,Phone,MobilePhone
When I have time, I'll test this myself and hopefully incorporate this fix into the next version. Thanks
Hi Ryan, thanks for the script.
Is it possible to get all users in Office 365 with an email adress?
In your old script you used "$Users = Get-User -Filter {WindowsEmailAddress -ne $null} -ResultSize unlimited", it seems that in your new script only users with a mailbox in Exchange Online are included. We have an Exchange Hybrid environment and not all users are migrated to Exchange Online.
Thanks for response