Search code examples
powershellexchange-server

Powershell: Extract Exchange property and Display in array


I need to get all Exchange users into an Array, with a column for their SIP address and another column for all SMTP addresses (as seen in the EmailAddresses field). So for now I am trying this against a single user and should that work out I can use "-ResultSize Unlimited" and do all. Although for now:

$list_UsersExtCloud = 
Get-Recipient e12367 | 
Select-Object Alias, EmailAddresses, @{Name = 'SIP'; Expression = { $_.EmailAddresses | Where-Object { $_ -like "*sip*" } -join ',' } }

I could extract the SIP by iterating using a FOR LOOP through each user properties with EmailAddresses | where {$_ -like "*sip*"}, but I'm trying to extract it in the EXPRESSION statement itself. How can I get this to work?


Solution

  • You are on the right track, however you are trying to join the objects without referencing the sub-properties you are actually interested in. Try something like:

    $list_UsersExtCloud =
    Get-Recipient e12367 |
    Select-Object Alias, EmailAddresses, @{ Name = 'SIP'; Expression = { ($_.EmailAddresses | Where-Object { $_.Prefix -eq "SIP" }).ProxyAddressString -join ',' } }
    

    I changed the Where clause to use the Prefix. I grouped the address objects then unrolled the ProxyAddressString from them. This give good input to the -join. You can also do this with the AddressString property, I wasn't sure which you were really interested in.

    Note: If you let this output without assigning to a variable the EmailAddresses property will likely bump the SIP property off the screen. I found that a little confusing while working this out, thought I'd mention it.

    Warning: Get-Recipient has a known issue. When making very large queries it won't page properly and will return an LDAP cookie error. So this may blow up if you have enough recipients. An alternative is to query for mail enabled objects using Get-ADObject then customize the object similarly using Select-Object.