Почта, включающая учетную запись AD слишком рано после создания - PullRequest
3 голосов
/ 03 сентября 2011

Я использую библиотеку System.DirectoryServices.AccountManagement для создания учетной записи пользователя AD, затем вскоре после использования пространства выполнения PowerShell для запуска команды Enable-Mailbox.

Когда я запускаю это, это иногда сбой при включении почты с ошибкой " Для учетной записи Active Directory должна быть включена регистрация для почтового ящика пользователя. "

Если повторно выполнить тот же код, но просто попробуйтеMail-Включить только учетную запись, все работает нормально.И опять же, в других случаях он может создать учетную запись AD и включить поддержку почты.

По этой ссылке предполагается, что AD все еще настраивает учетную запись, когда Exchange пытается включить ее поддержку почты:

http://social.technet.microsoft.com/Forums/en-US/exchangesvrdevelopment/thread/d53d91fd-c479-40e4-9791-32cb5da24721?prof=required

Вот код пространства выполнения:

var connectionInfo = new WSManConnectionInfo(new Uri(ConfigurationManager.AppSettings["PSExchangeURI"]), ConfigurationManager.AppSettings["PSExchangeShellURI"], new PSCredential(ConfigurationManager.AppSettings["Username"], ConfigurationManager.AppSettings["Password"].ToSecureString()));
connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Kerberos;

var command = new Command("Enable-Mailbox");
command.Parameters.Add("Identity", userPrincipal.UserPrincipalName);
command.Parameters.Add("Alias", userPrincipal.SamAccountName);
command.Parameters.Add("DisplayName", userPrincipal.DisplayName);
command.Parameters.Add("Database", ConfigurationManager.AppSettings["ExchangeDatabase"]);

using (var runspace = RunspaceFactory.CreateRunspace(connectionInfo)) {
    using (var pipeline = runspace.CreatePipeline()) {
        runspace.Open();
        pipeline.Commands.Add(command);

        var results = pipeline.Invoke();
    }
}

Есть ли что-то еще, что я могу сделать, чтобы избежать этой ошибки (кроме введения спящего потока)?

Ответы [ 2 ]

5 голосов
/ 04 сентября 2011

То, что вы видите, скорее всего, связано с задержкой репликации и обменным сервером, который обращается к другому DC, чем коду создания пользователя AD.

Что вам нужно сделать, это настроить обмен и ваш код создания AD для общения с одним и тем же DC.

Из объекта PrincipalContext в S.DS.AM считывает полное доменное имя контроллера домена из свойства ConnectedServer .Затем передайте это значение параметру -DomainController командлету enable-mailbox.

0 голосов
/ 12 мая 2017

Поэтому я решаю проблему «жесткого кодирования» DC, объявив переменную $ dchostname в своем коде во время выполнения.Он запрашивает домен, чтобы найти подходящий DC, а затем все процессы в моем скрипте используют этот домен.Таким образом, даже если я заменю все свои контроллеры домена, мне не нужно обновлять мой код.

#Domain Controller Information
$dcs = (Get-ADDomainController -Filter *)
$dc = $dcs | Where {$_.OperationMasterRoles -like "*RIDMaster*"}
$dchostname = $dc.HostName
...