使用 Get-AzureADUser 从 PowerShell 中的'SMTP:email@domain.com'中删除'SMTP'



我正在使用下面的脚本为O365中的用户显示别名,我最终将导出这些别名。

Get-AzureADUser |
Select-Object @(
@{L = "Name"; E = { $_.DisplayName}}
@{L = "Email"; E = { $_.UserPrincipalName}}
@{L = "Aliases"; E = { $_.ProxyAddresses -join ";"}}
)

在别名(ProxyAddresses(列中,它按预期显示由;分隔的所有别名,但在所有别名前面也包括SMTP:

有没有办法从这些值中删除SMTP:

当前结果SMTP:email@domain.com;SMTP:email2@domain.com

所需结果email@domain.com;email2@domain.com

Get-AzureADUser |
Select-Object @(
@{L = "Name"; E = { $_.DisplayName}}
@{L = "Email"; E = { $_.UserPrincipalName}}
@{L = "Aliases"; E = { $_.ProxyAddresses -replace '^smtp:' -join ';' }}
)

这将取代每个代理地址开头(^(的smtp:,使用PowerShell的功能使运算符自动处理数组的所有成员,然后加入结果。

如果您也想丢失".onmicrosoft.com"地址,这应该可以在中工作

Get-AzureADUser |
Select-Object @(
@{L = "Name"; E = { $_.DisplayName}}
@{L = "Email"; E = { $_.UserPrincipalName}}
@{L = "Aliases"; E = { 
$proxies = $_.ProxyAddresses -replace '^smtp:'
$proxies = $proxies | Where-Object { $_ -notlike '*.onmicrosoft.com' }
$proxies -join '; ' }
}
)

请注意,ProxyAddresses属性还可以包含其他条目,如SIP:upn@domain.comX500: /o=company/ou=External (FYDIBOHF25SPDLT)/cn=Recipients/cn=userxxx

如果您也想排除这些,请使用

Get-AzureADUser |
Select-Object @(
@{L = "Name"; E = { $_.DisplayName}}
@{L = "Email"; E = { $_.UserPrincipalName}}
@{L = "Aliases"; E = { 
$proxies = $_.ProxyAddresses
$proxies = $proxies | Where-Object { $_ -match '^smtp:' -and $_ -notlike '*.onmicrosoft.com' }
$proxies -replace '^smtp:' -join '; ' }
}
)

最新更新