我有一台 Exchange 服务器,以前它用于管理多个 SMTP 域;现在它只需要管理一个。
我已经从所有地址策略中删除了辅助域;我需要删除所有引用它的 SMTP 地址。
所有用户都将其主 SMTP 地址设置为使用主域;但几乎所有用户都有另一个使用辅助域的地址。他们还有许多其他不同的地址:用于 lync 的 SIP 地址,以及从以前的迁移中派生的一个或多个 X500 地址。这些地址根本不应该被触及。
我怎样才能删除所有这些辅助 SMTP 地址而不影响其他任何内容?
答案1
在投入生产之前,请在实验室和/或一小组测试用户中进行测试。
$SMTPDomainToRemove = "@OldDomain.com"
$AllUsers = Get-ADUser -Filter * -Properties proxyAddresses
Foreach($usr In $AllUsers)
{
$NewAddressList = @()
$OldAddressList = $usr.proxyAddresses
Foreach($addr In $OldAddressList)
{
If(!($addr -Match $SMTPDomainToRemove))
{
$NewAddressList += $addr
}
}
If($NewAddressList.Count -GT 0)
{
Set-ADUser $usr -Replace @{ 'proxyAddresses' = $NewAddressList}
}
}
我们的想法是,我们获取每个用户的 proxyAddresses 地址列表,删除其中包含旧域名的地址列表,然后用不包含对旧域名的引用的新地址列表替换该地址列表。
http://blogs.technet.com/b/exchange/archive/2005/01/10/350132.aspx
电子邮件地址属性
Exchange 在以下属性中存储并使用有关收件人电子邮件地址的信息:proxyAddresses
这是保存电子邮件地址信息的主要属性。当您在 Outlook 中打开收件人的属性并查看“电子邮件地址”选项卡时,您会看到此属性。这是一个多值字符串,包含代表收件人的所有地址。每个值必须具有以下格式:type:address
例如:SMTP:[电子邮件保护]
当类型为大写字母时,该地址被视为该类型的主地址,并用作该收件人的默认回复地址。当类型为小写字母时,该地址被视为次要地址,用于在电子邮件传递过程中解析地址,允许同一收件人接收发往不同电子邮件地址的电子邮件。
答案2
这是一个比我原来的答案更好的版本(它处理每个邮箱要删除的多个地址并提供更多输出):
$domain = 'somedomain.com'
$mbxs = Get-Mailbox -ResultSize Unlimited
foreach($m in $mbxs)
{
Write-Host 'Mailbox:' $m.SAMAccountName
$addrs = $m.EmailAddresses
for($i = 0;$i -lt $addrs.Count;$i++)
{
$addr = $addrs[$i]
if($addr.PrefixString -eq 'smtp'-and $addr.SmtpAddress -like '*@' + $domain)
{
Write-Host 'Removing address:' $addr.SmtpAddress
$m.EmailAddresses.RemoveAt($i)
$i--
}
}
if($addrs.Changed)
{
Write-Host 'Saving mailbox:' $m.SAMAccountName
Set-Mailbox $m -EmailAddresses $addrs
}
else
{
Write-Host 'No address to remove'
}
}