Copilot for Microsoft 365 Tech Accelerator
Feb 28 2024 07:00 AM - Feb 29 2024 10:30 AM (PST)
Microsoft Tech Community

Get mailcontact if member of any group

Copper Contributor

Hi Tech Community,

 

May I ask how can I accomplish the subject? I want to know before removing a mail contact if it is a member of a Distribution group.

 

Best Regards,

Mark

11 Replies

Hey @Mark Louie Diaz,

 

I think this would work:

 

$Username = "user@domain.com"

 

$DistributionGroups= Get-DistributionGroup | where { (Get-DistributionGroupMember $_.Name | foreach {$_.PrimarySmtpAddress}) -contains "$Username"}

Just toss in the email address for the mail user in there, and it should return any DL that has that user.

 

Adam

You would need a script that cycles through all the distribution groups and members within them and list the groups that a particular member is a part of. I got this task back in the days. you can use this script to check if a user is a part of a distribution group. 

Get Distribution lists that a member is a part of

https://gallery.technet.microsoft.com/scriptcenter/Get-Distribution-lists-2ceda593

Here's a fast way to do it:

 

$dn = (Get-MailContact your_mail_contact).DistinguishedName

Get-Recipient -Filter "Members -eq '$dn'"

 

This will return all DGs, mail-enabled SGs and O365 Groups the contact might be a member of. And since it's a server-side filter, you don't need to iterate over each group.

The following will get you a cleaner list with all mailboxes followed by contacts $m = New-Object System.Collections.ArrayList $c = New-Object System.Collections.ArrayList Get-DistributionGroupMember GroupName | ForEach-Object { if($_.RecipientType.ToString().Contains("Mailbox") -eq $true) { $m.Add($_.Name) } else { if ($_.RecipientType.ToString().Contains( "Contact") -eq $true) { $c.Add($_.Name) } } } $m | Get-Mailbox | ft Name,For* $c | Get-MailContact | ft Name,For*

https://getappvalley.com/

https://vidmate.onl/

https://tweakbox.mobi/

@Vasil Michevthe need for speed? try this...

 

Get-ADObject -LDAPFilter "(&(objectCategory=contact)(objectClass=contact)(memberOf=*))" -Properties Name,MemberOf,CanonicalName | ft Name,CanonicalName,memberof -wrap

@Vasil Michev 

 

Hey Vasil, 

 

On this here: 

 

$dn = (Get-MailContact your_mail_contact).DistinguishedName

Get-Recipient -Filter "Members -eq '$dn'"

 

How would i add an input file to your script? for instance i would like to run the above cmdlets on a list of 122 people. 

Thanks, 

 

Robert

 

I am working on the same ask. @Mark Louie Diaz 

Did you find a resolution? 

@Dominique0473 

 

This works for me:

Get-ADObject -LDAPFilter '(&(objectclass=contact)(!(memberof=*)))' -Server dc01 -SearchBase 'OU=Contacts,OU=Company,DC=work,DC=com' -Properties name

Utilizing the LDAP FIlter was smart, it allowed me to act against just the ADObjects that were Contacts with existing group memberships without rewriting the entire script. Thanks!
Worked for me.. it was really fast!! Can you please let me know how can I get primarysmtp address of contact via above script?

This is much more efficient, I was needing members for contacts, we have huge environment so 40k of distribution lists would not be efficient to query,
I modified so
$c = get-contact (contact smtp)
Get-ADObject -Identity $c.DistinguishedName -Properties memberof |fl
and members resulted ***THANK YOU*** not sure why MS decided not to list "member of" in ECP / powershell for contacts.