I’ve been playing with Office 365 commands in PowerShell and had to do a search. Sounds simple, but depending on what you’re searching, some scenarios are less basic than others.
Everything in PowerShell is an object. Usually, a property in PowerShell has a single value, such as:
UserPrincipalName: [email protected]
which is one of the results from Get-MsolUser. However, another property is different:
AlternateEmailAddresses: {[email protected]}
Visually, the difference is just the {} braces that contain the value. These braces mean that the property has been built to contain multiple items, rather than a single item.
If I wanted to see a list of all UserPrincipalNames, I’d use this command:
Get-MsolUser -all | select UserPrincipalName
A nice list of UPNs would display on the screen. However, that same command against AlternateEmailAddress, all that comes up is a bunch of blank lines.
To make this work, we need to select the value and show all the expressions of each value:
get-msoluser -all | select @{Name=“AlternateEmailAddresses”;Expression={$_.AlternateEmailAddresses}}
To then search on those values with the ‘where’ command, you’d have to write it like this:
get-msoluser -all | select @{Name=“AlternateEmailAddresses”;Expression={$_.AlternateEmailAddresses}} | where {$_.AlternateEmailAddresses -like "*contoso*"}
The good news is, for a where search by itself, you can forget all that and go back to basics:
Get-MsolUser -all | Where AlternateEmailAddresses -like "*contoso*"
Because of this requirement on the Select command, it lead me down the wrong path for a bit. There’s other reading on how to list all the values of a multi-valued property
If you’re still lost and want to get started with PowerShell, try checking out this PowerShell Basics video
Great post Adam, this helped me a lot!