如何在PowerShell中提取Exchange用户的SIP与SMTP地址至数组
解决Exchange PowerShell提取SIP地址的问题
你的代码提取SIP地址失败,核心原因是EmailAddresses返回的是ProxyAddress对象集合,而非纯字符串,直接用-like "*sip*"无法正确匹配。下面提供两种可靠的解决方法:
方法一:利用ProxyAddress对象属性(推荐)
ProxyAddress对象自带Prefix和Address属性,直接过滤前缀为SIP的条目,提取地址最准确:
$list_UsersExtCloud = Get-Recipient e12367 | Select-Object Alias, EmailAddresses, @{ Name = 'SIP' Expression = { ($_.EmailAddresses | Where-Object { $_.Prefix -eq 'SIP' }).Address -join ',' } }
方法二:字符串匹配方式
如果习惯用字符串处理,先将ProxyAddress对象转为字符串,匹配SIP:前缀后再去除前缀:
$list_UsersExtCloud = Get-Recipient e12367 | Select-Object Alias, EmailAddresses, @{ Name = 'SIP' Expression = { $_.EmailAddresses | Where-Object { "$_" -like "SIP:*" } -replace 'SIP:', '' -join ',' } }
扩展:提取所有SMTP地址
如果需要同时提取所有SMTP地址(包括主地址和别名),可以添加额外的计算属性:
$list_UsersExtCloud = Get-Recipient e12367 | Select-Object Alias, EmailAddresses, @{Name = 'SIP'; Expression = { ($_.EmailAddresses | Where-Object { $_.Prefix -eq 'SIP' }).Address -join ',' }}, @{Name = 'SMTPAddresses'; Expression = { ($_.EmailAddresses | Where-Object { $_.Prefix -match 'SMTP' }).Address -join ',' }}
后续处理全部用户时,只需将Get-Recipient e12367改为Get-Recipient -ResultSize Unlimited即可。
内容的提问来源于stack exchange,提问作者hdsouza
相关产品推荐
相关产品推荐

