Exchange Powershell question for filtering results of a query

Posted on 2014-02-12
Last Modified: 2014-02-13
I have a command that gets me the information of a users Safe Senders:
Get-MailboxJunkEmailConfiguration JohnDoe |Select-Object -ExpandProperty trustedsendersanddomains | sort-object

if you run
Get-MailboxJunkEmailConfiguration JohnDoe
the results would have each email address within a parenthesis separated by commas.

If you run 1st command I listed you get the emails in a column. If the user entered specific email addresses like, you see that in the result.
if they tried to add a Domain to their safesender, the Outlook UI lists it like

the powershell command will result showing the Hotmail domain as just

w/o the @ sign

So, what I am looking for is, the right syntax to get only the addresses that are complete (not the domain entries).
I tried to filter my search by only showing the items that have the @ sign

Get-MailboxJunkEmailConfiguration JohnDoe |Select-Object -ExpandProperty trustedsendersanddomains | ? {$_.trustedsendersanddomains -like "*@*"} | sort-object

which does not work.   :(
Question by:taartero
  • 2
  • 2
LVL 39

Accepted Solution

footech earned 500 total points
ID: 39855089
Since you used the -expandProperty parameter, the objects that are sent down the pipeline from Select-Object do not have the trustedsendersanddomains property.  You can see this by running:
Get-MailboxJunkEmailConfiguration JohnDoe |Select-Object -ExpandProperty trustedsendersanddomains | Get-Member

Open in new window

So, you just need to adjust your code like this:
Get-MailboxJunkEmailConfiguration JohnDoe | Select-Object -ExpandProperty trustedsendersanddomains | ? {$_ -like "*@*"} | sort-object

Open in new window

I think it will work, but let me know if there are problems because I haven't tested.

Author Comment

ID: 39856333
I found, running your 1st command to be very interesting to me:
Get-MailboxJunkEmailConfiguration JohnDoe |Select-Object -ExpandProperty trustedsendersanddomains | Get-Member

Name             MemberType            Definition
----             ----------            ----------
Clone            Method                System.Object Clone(), System.Obje
CompareTo        Method                int CompareTo(System.Object value)
Contains         Method                bool Contains(string value)
CopyTo           Method                void CopyTo(int sourceIndex, char[
EndsWith         Method                bool EndsWith(string value), bool
Equals           Method                bool Equals(System.Object obj), bo
GetEnumerator    Method                System.CharEnumerator GetEnumerato
GetHashCode      Method                int GetHashCode()
GetType          Method                type GetType()
GetTypeCode      Method                System.TypeCode GetTypeCode(), Sys
IndexOf          Method                int IndexOf(char value), int Index
IndexOfAny       Method                int IndexOfAny(char[] anyOf), int
Insert           Method                string Insert(int startIndex, stri
IsNormalized     Method                bool IsNormalized(), bool IsNormal
LastIndexOf      Method                int LastIndexOf(char value), int L
LastIndexOfAny   Method                int LastIndexOfAny(char[] anyOf),
Normalize        Method                string Normalize(), string Normali
PadLeft          Method                string PadLeft(int totalWidth), st
PadRight         Method                string PadRight(int totalWidth), s
Remove           Method                string Remove(int startIndex, int
Replace          Method                string Replace(char oldChar, char
Split            Method                string[] Split(Params char[] separ
StartsWith       Method                bool StartsWith(string value), boo
Substring        Method                string Substring(int startIndex),
ToBoolean        Method                bool IConvertible.ToBoolean(System

I was looking through those results trying to make sense of what I was reading. I thought as I was going down that list, that I was going to find the "-expandproperty".
After going through that list, I couldn't see what I think you were trying to tell me.
I am still very interested in you explaining what the "get-member' is actually telling me (since im guessing it is getting me the member {properties} of the result)

Anyhow, I then ran your second command:
Get-MailboxJunkEmailConfiguration JohnDoe | Select-Object -ExpandProperty trustedsendersanddomains | ? {$_ -like "*@*"} | sort-object

and the answer for me is in the pipe ""  ? {$_ -like "*@*"} ""
Where the $_ is left blank... vs.  $_.VALUE

Thanks so much, it worked like a CHAMP

Author Closing Comment

ID: 39856336
Thanks so Much!

hopefully you still answer the comment I made
LVL 39

Expert Comment

ID: 39856398
It may make more sense to you if you run
Get-MailboxJunkEmailConfiguration JohnDoe | gm

Open in new window

(gm is an alias for Get-Member) and compare the results to what you saw earlier.  Basically what you saw was the properties and methods available for a string, which is what the "trustedsendersanddomains" property is.  At the top of the output you should see the type of the object that is output, like "TypeName: System.String".  When you run the code in this post you will see all the properties and methods available for the objects sent to the Get-Member cmdlet (i.e. the objects output by Get-MailboxJunkEmailConfiguration).

Get-Member is very useful when you're developing a script and are trying to discover what information is available to you and what you can do with it.

Featured Post

Netscaler Common Configuration How To guides

If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Scam emails are a huge burden for many businesses. Spotting one is not always easy. Follow our tips to identify if an email you receive is a scam.
A brief introduction to what I consider to be the best editor for PowerShell.
The basic steps you have just learned will be implemented in this video. The basic steps are shown to configure an Exchange DAG in a live working Exchange Server Environment and manage the same (Exchange Server 2010 Software is used in a Windows Ser…
This video discusses moving either the default database or any database to a new volume.

776 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question