2016-01-24 3 views
0

Я использую следующий код для создания нового пользователя активного каталога. Учетная запись создана успешно, но когда я пытаюсь войти в свой домен, я получаю сообщение «убедитесь, что вы ввели пароль для своей работы или учетной записи школы». Я убедился, что пароль введен правильно и что учетная запись включена и разблокирована в активном каталоге.Настройка учетной записи пользователя Active Directory в первый раз

 DirectoryEntry entry = new DirectoryEntry(createLdapPath); 
     try 
     { 

      DirectoryEntry newUser = entry.Children.Add("CN = " + userName, "USER"); 
      newUser.Properties["targetAddress"].Value = "SMTP:" + userName + "@mydomain.onmicrosoft.com"; 
      newUser.Properties["extensionAttribute15"].Value = "EDU"; 
      newUser.Properties["proxyAddresses"].Add("SMTP:" + userName + "@mydomain1.edu"); 
      newUser.Properties["proxyAddresses"].Add("smtp:" + userName + "@mydomain.onmicrosoft.com"); 
      newUser.Properties["proxyAddresses"].Add("smtp:" + userName + "@mydomain2.mail.onmicrosoft.com"); 
      newUser.Properties["givenName"].Value = fname; 
      newUser.Properties["sn"].Value = lname; 
      newUser.Properties["displayName"].Value = fname + " " + lname; 
      newUser.Properties["mail"].Value = fname.ToLower() + "." + lname.ToLower() + "@mydomain.edu"; 
      newUser.Properties["sAMAccountName"].Value = fname.ToLower() + "." + lname.ToLower(); 
      newUser.Properties["userPrincipalName"].Insert(0, fname.ToLower() + "." + lname.ToLower() + "@mydomain.edu"); 

      newUser.CommitChanges(); 

      newUser.Invoke("SetPassword", new object[] { "myStrongPassword" }); 
      newUser.CommitChanges(); 

      newUser.Close(); 

      string strUserName = userName; 
      DirectoryEntry usr = entry; 
      DirectorySearcher searcher = new DirectorySearcher(usr); 
      searcher.Filter = "(SAMAccountName=" + strUserName + ")"; 
      searcher.CacheResults = false; 
      SearchResult result = searcher.FindOne(); 
      usr = result.GetDirectoryEntry(); 
      usr.Properties["LockOutTime"].Value = 0; 

      int old_UAC = (int)usr.Properties["userAccountControl"][0]; 

      // AD user account disable flag 
      int ADS_UF_ACCOUNTDISABLE = 2; 

      // To enable an ad user account, we need to clear the disable bit/flag: 
      usr.Properties["userAccountControl"][0] = (old_UAC & ~ADS_UF_ACCOUNTDISABLE); 
      usr.CommitChanges(); 

      usr.Close(); 
      entry.Close(); 


     } 
     catch (Exception ex) 
{} 

Я могу войти только тогда, когда я открываю «пользователи и компьютеры Active Directory» и перейдите к моей недавно созданной учетной записи -> Щелкните правой кнопкой мыши -> Сброс пароля. Затем введите пароль еще раз, а также установите флажок «Разблокировать пользователя». Таким образом, когда я пытаюсь войти в систему, он работает нормально.

В чем я могу быть пропущен или ошибочен в моем коде?

ответ

1

Вам не нужно закрывать объект 'newUser' и перегруппироваться. Вот мой код, который работает в нашей производственной среде:

//Create user 
newUser.CommitChanges(); 

newUser.Invoke("SetPassword", password); 
newUser.Properties["userAccountControl"].Value = 512; 
newUser.CommitChanges(); 
newUser.Close(); 

Это также возможно, что «(old_UAC & ~ ADS_UF_ACCOUNTDISABLE)» не получится быть 512 (ADS_UF_NORMAL_ACCOUNT).

+0

Спасибо за ваш ответ. В моем случае оказалось, что активный каталог еще не синхронизирован с офисом 365. – user3340627

1

Оказалось, что синхронизация Active Directory еще не запущена с Office 365, поэтому я не смог войти в систему с учетной записью пользователя. Я мог бы синхронизировать вручную, выполнив задачу синхронизации задач Task Scheduler Active Directory.

+0

Рад, что вы поняли. –

Смежные вопросы