Exchange 2007 и статическая конфигурация контроллеров домена
Сегодня получил такое письмо и решил заодно опубликовать свой ответ:
Здравствуйте.
Вы как разработчик Exchange надеюсь сможете мне помочь.
У меня возникла следующая проблема.
При добавлении/удалении ролей, а также при запуске setup.exe c любыми из ключей /PrepareAD /PrepareLegacyExchangePermissions /PrepareSchema возникает ошибка:
Setup cannot use domain controller 's-dc1.xxxxxxxx.RU' because an override is set in the registry. Run Setup again, and specify '/DomainController:'.
Ничего не могу сделать с Exchange, ни удалить, ни переустановить.
Где отыскать это переопределение (override in the registry)?
В Exchange можно задать статический список контроллеров домена/глобальных каталогов. Он хранится в регистратуре, но имеется и нормальный "человеческий" доступ к этим данным. Вот как их можно посмотреть:
[PS] D:\>get-exchangeserver -status | fl Name, Static*
Name : 4367R9-A15
StaticDomainControllers : {}
StaticGlobalCatalogs : {}
StaticConfigDomainController :
StaticExcludedDomainControllers : {}
В данном случае у меня нет никаких статических серверов. Вот как их можно установить:
[PS] D:\>Set-ExchangeServer 4367R9-a15 -StaticDomainControllers hp643453.JXNLDW-dom.com
Посмотрим, что получилось:
[PS] D:\>get-exchangeserver -status | fl Name, Static*
Name : 4367R9-A15
StaticDomainControllers : {hp643453.JXNLDW-dom.com}
StaticGlobalCatalogs : {}
StaticConfigDomainController :
StaticExcludedDomainControllers : {}
Теперь уберем статическую конфигурацию и разрешим Exchange самому выбирать контроллеры домена и глобальные каталоги:
[PS] D:\>Set-ExchangeServer 4367R9-a15 -StaticDomainControllers $null
Проверим, что все чисто:
[PS] D:\>get-exchangeserver -status | fl Name, Static*
Name : 4367R9-A15
StaticDomainControllers : {}
StaticGlobalCatalogs : {}
StaticConfigDomainController :
StaticExcludedDomainControllers : {}
Перед запуском программы установки Exchange для удаления или модификации ролей необходимо очистить всю статическую конфигурацию. Это нужно для того, чтобы программа установки могла выбирать контроллеры домена по своему усмотрению (например, schema master если указан ключ /PrepareSchema).
Статические списки серверов имеет смысл использовать только для выяснения причин неполадок или чтобы временно избежать использования перегруженных или неисправных серверов. Я не рекомендую иметь эти списки на постоянной основе, так как они уменьшают живучесть Exchange в случае, если сервера из этого списка вдруг станут недоступны. А если у вас в реестре прописан конфигурационный контроллер домена (StaticConfigDomainController), то если по каким-то причинам пропадет связь с ним, Exchange перестанет функционировать. (В обычных условиях, когда ничего нигде не прописано, будет случайно выбран другой работающий контроллер домена и ничего страшного не произойдет).
Кстати, эти настройки существуют начиная с Exchange 2000.
P.S. Оказалось что установка всех статических серверов в $null проблемы не решила. Дело в том, что при этом ключ в реестре не удаляется (а только очищается его значение). ExBPA этого не понимает и считает, что ститческий сервер по-прежнему там. Это уже исправлено в первом Сервис Паке к Exchange 2007. В краткосрочной перспективе можно просто удалить значение HKLM\System\CurrentControlSet\Services\MSExchange ADAccess\Instance0\ConfigDCHostName из реестра (чтобы его вообще не было, даже пустого). То, что значение пустое, видно, кстати, из сообщения об ошибке, упомянутого выше: '/DomainController:'. Если бы в реестре был "настоящий" контроллер домена, то ошибка бы содержала это имя: '/DomainController:dcname.corp.com', и тогда запуск программы установки с таким ключом прошел бы успешно.