In my previous post I showed how to retrieve the membership of one or multiple groups. In today's post I want to find the Distribution groups a user belongs to.
There are multiple approaches you could be using to gather this information but as an example I'll re-use the same one-liner from my previous article and simply filter with Where-Object to find a particular User.
This is probably the route PowerShell beginners would take and it is working 'Fine' in a small environment but not very efficient, you'll see in the following example.
In this environment, there are a bit more than 1800 Distribution Groups. I want to know which Distribution Group I'm member of.
Retrieving the count of Distribution Groups and an User account in Office 365 |
Requirement
You need to be connected to Exchange Online. This can be done using on of the following functions:Find User's distribution groups with the Where-Object cmdlet
This retrieve all the members of each groups, then narrow down the output to only the user I'm looking for. This looks good with the only problem than this one-liner took... 15 minutes to query all the groups memberships, Not really efficient...
Find User's distribution groups with the Filter parameter
What you can do instead is to filter as much as you can on the left side of your command line.
This is one of the best practice in Powershell because the output of your first function is much smaller compare to the 1800 Distribution Groups we get in the previous example.
Here I'm using the Filter parameter from the Get-DistributionGroup to only find groups where my distinguished name appears.
Get-DistributionGroup -Filter "Members -like $($user.distinguishedName)"
Exchange Cmdlet Server-Side Opath Filtering
I don't know if you notice but there is a trick here in the previous example.
In the Filter I specified the "Members" property.... but there is no Members property when you check the Get-DistributionGroup members.
Get-DistributionGroup -ResultSize 5 | Get-Member -Name "*Member*"
No signs of 'Members' property |
Get-Help on Get-DistributionGroup - FILTER Parameter |
Exchange Opath filters
OPATH is basis for the filtering syntax used by PowerShell, and is therefore the filtering syntax used by Exchange 2007. It replaces the complicated syntax of LDAP used in Exchange 2003, and will allow for filters which are easier to create and interpret. For native PowerShell filters, all work is done client-side in the Powershell host. In Exchange 2007, however, various cmdlets provide "server-side" filters using the same syntax as their client-side counterparts. These server-side filters provide higher performance and added scenarios that are specific to Exchange Server.
http://blogs.technet.com/b/exchange/archive/2007/01/10/3397707.aspx
OPATH is basis for the filtering syntax used by PowerShell, and is therefore the filtering syntax used by Exchange 2007. It replaces the complicated syntax of LDAP used in Exchange 2003, and will allow for filters which are easier to create and interpret. For native PowerShell filters, all work is done client-side in the Powershell host. In Exchange 2007, however, various cmdlets provide "server-side" filters using the same syntax as their client-side counterparts. These server-side filters provide higher performance and added scenarios that are specific to Exchange Server.
http://blogs.technet.com/b/exchange/archive/2007/01/10/3397707.aspx
More information on the properties that you can use with Exchange Cmdlets in the Filter Parameter : https://technet.microsoft.com/en-us/library/bb738155(v=exchg.150).aspx
Additional Information
- Exchange Online - OPATH Syntax
- Exchange Online - Filters in recipient Shell commands
- Exchange Online - Filterable properties for the -Filter parameter
Thanks for reading! If you have any questions, leave a comment or send me an email at fxcat@lazywinadmin.com. I invite you to follow me on Twitter @lazywinadm / Google+ / LinkedIn. You can also follow the LazyWinAdmin Blog on Facebook Page and Google+ Page.
No comments:
Post a Comment