如何從所有 Exchange 郵箱中刪除輔助域的 SMTP 地址?
我有一個用於管理多個 SMTP 域的 Exchange 伺服器;現在它只需要管理一個。
我已經從所有地址策略中刪除了輔助域;我需要刪除所有引用它的 SMTP 地址。
所有使用者都將其主 SMTP 地址設置為使用主域;但幾乎所有人都有另一個使用輔助域的地址。它們還有許多其他不同的地址:用於 lync 的 SIP,以及從以前的遷移中派生的一個或多個 X500。這些根本不應該被觸及。
如何在不影響其他任何內容的情況下刪除所有這些輔助 SMTP 地址?
這是比我原來的答案更好的版本(它為每個郵箱處理多個要刪除的地址,並且還提供更多輸出):
$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' } }
請在實驗室和/或一小部分測試使用者上進行測試,然後再使用它進行生產。
$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:nospam@online.microsoft.com
當類型為大寫字母時,該地址被認為是該類型的主地址,並用作該收件人的預設回复地址。當類型為小寫字母時,該地址被視為輔助地址,用於在電子郵件傳遞過程中解析地址,允許同一收件人接收定向到不同電子郵件地址的電子郵件。