この環境は、Exchange 2007から新しいExchange 2010サーバーにアップグレードされています。 Federation_Contacts OUの下に存在する数千の電子メール連絡先があります。各メール連絡先の[電子メールアドレス]タブで、正しいSMTPアドレス(たとえば、john @ othercompany.com)がプライマリとして割り当てられます。しかし、どういうわけか、それぞれが私たちの会社([email protected]と[email protected])で内部メールアドレスを割り当てられました
問題は、これらの連絡先へのメールが#550 5.1.1 RESOLVER.ADR.ExRecipNotFoundで返送されることです。見つかりません
誤って作成された内部SMTPアドレスを削除して、受信者ポリシー設定に基づいて自動更新アドレスのチェックを外す必要があります。
私の質問は次のとおりです。1-内部ユーザーに影響を与えないように注意しながら、これらのメール連絡先の内部メールアドレスを一括削除するにはどうすればよいですか?
2-Exchange(より正確には、受信者ポリシー)が新しいメール連絡先の内部アドレスを作成しないようにするにはどうすればよいですか?
Powershellを使用して、受信者ポリシーからの電子メールアドレスの更新を無効にしました。
Get-MailContact -OrganizationalUnit "domain.local/OU" | set-mailcontact -emailaddresspolicyenabled $false
次にADModify.netを使用して、連絡先に割り当てられているセカンダリSMTPアドレスを取り除きました。それは魅力のように働きました。
同じ問題が発生したので(少し遅れて)、「スクリプト」を取得して更新しました。 Exchangeの連絡先に適用されるメールアドレスポリシーを無効にする必要があります。これにより、問題が部分的に解決します。
1)[Microsoft Exchangeオンプレミス]を展開します。2)組織構成を展開します。3)[ハブトランスポート]を選択し、[電子メールアドレスポリシー]タブに移動します。4)それぞれを編集します。Users with external e-mail addresses
チェックボックスなし、Contacts with external e-mail addresses
。
デフォルトのポリシーを無効にできないため、問題を部分的に解決します。結局、デフォルトでdomain.localの電子メールアドレスを新しい連絡先に追加することになりました。
だから私は問題の提供されたものに基づいてスクリプトを書きました(問題のあるものには同じドメインからの複数のアドレスが割り当てられ、それが多くのノイズを引き起こしていたいくつかのバグがありました)、外部ではないメールアドレスを削除し、それはまた、古い連絡先にポリシーが再適用されないことを確認してください。
####
# Input variables
####
$domains = @("*@domain.com","*@domain.pl","*@evotec.pl", "*@domain.local")
$ou = "evotec.local"
####
# Removing internal domains from contacts
####
$domains | foreach {
$domain = $_;
write-Host "Preparing for removal of addresses with domain name:" $domain
$Contacts = Get-MailContact -OrganizationalUnit $ou -Filter {
EmailAddresses -like $domain -and name -notlike "ExchangeUM*"
} -ResultSize unlimited -IgnoreDefaultScope
$Contacts | foreach {
$contact = $_;
$email = $contact.emailaddresses;
#write-Host "1. " $contact
#write-Host "2. " $contact.name
#write-Host "3. " $email
#write-Host "4. " $contact.identity
$email | foreach {
if ($_.smtpaddress -like $domain)
{
$address = $_.smtpaddress;
write-Host "[*] Removing address" $address "from Contact" $contact.name;
Set-Mailcontact -Identity $contact.identity -EmailAddresses @{Remove=$address};
}
}
}
}
####
# Setting up email address policy to disabled for all contacts
####
write-Host "Preparing all contacts for disabling email address policy"
$Contacts = Get-MailContact -OrganizationalUnit $ou -Filter {
EmailAddresses -like $domain -and name -notlike "ExchangeUM*"
} -ResultSize unlimited -IgnoreDefaultScope | Where {$_.EmailAddressPolicyEnabled -eq $true}
$Contacts | foreach {
$contact = $_;
write-Host "[*] Setting up email address policy to disabled for" $contact.name
$contact | set-mailcontact -emailaddresspolicyenabled $false
}
最後のステップは、新しい連絡先が編集不可能な(少なくともサポートされている方法で)デフォルトポリシーを取得し続けるため、タスクスケジューラとして設定することです。 Exchangeサーバーでのこのセットアップは問題なく実行されます。必ず正しい権限で実行してください。
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command ". 'C:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto; C:\ExchangeScript\RemoveLGBSEmailsFromContacts.ps1"
最初に、これらのアドレスをサンプリングしている可能性のあるポリシーを特定します。メールボックスまたは連絡先にのみ適用されるように微調整できます...
...または連絡先のみの新しいものを作成します。
一括変更を行う必要がある場合は、混乱したpowershellをクリーンアップすることができます。
Get-MailContact | Set-MailContact -EmailAddressPolicyEnabled:$ false
これは、すべてのメール連絡先に役立ちます。