如何从所有 Exchange 邮箱中删除辅助域的 SMTP 地址?

如何从所有 Exchange 邮箱中删除辅助域的 SMTP 地址?

我有一台 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'
    }
}

相关内容