.Net-код для установки атрибута Active Directory на «не установлено» - PullRequest
5 голосов
/ 03 ноября 2011

В оснастке Active Direcotry mmc вы не можете видеть атрибуты, которые «Не установлены».Когда вы используете инструмент ADSIEDIT.MSC, если значения атрибутов равны нулю, вы видите их как «Не установлено».

Как я могу установить для атрибута значение «Не установлено» в коде .Net?

Вот ответ в Powershell, но мне нужно сделать это с помощью некоторого кода .Net (VB.Net/C#).http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/d6d0bfa1-73da-41ea-a7f5-f622de9f7d1b/

ps msExchHideAddressLists является атрибутом виновника, когда его значение True или False в этом домене предотвращает репликацию информации пользователя из AD в Sharepoint.

1 Ответ

3 голосов
/ 03 ноября 2011

В MSDN вы можете найти:

В часто используемых каталогах, которые поддерживают LDAP, атрибут без значения не существует. Когда значение атрибута устанавливается в ненулевое значение с помощью операции изменения, замены или добавления, атрибут создается, если он еще не существует. Точно так же, если атрибут изменен, чтобы не иметь значения (или значений), весь атрибут удаляется. Иногда вы можете захотеть установить атрибут на нуль. Хотя эта концепция не существует в каталогах, которые поддерживают LDAP, вы можете сделать это, полностью удалив атрибут и указав, что свойство должно быть очищено.

Вот пример использования System.DirectoryServices:

/* Connection to Active Directory
 */
DirectoryEntry deBase = new DirectoryEntry("LDAP://192.168.183.220:389/dc=societe,dc=local", "administrateur", "adm");

/* Directory Search
 */
DirectorySearcher dsLookForOUs = new DirectorySearcher(deBase);
dsLookForOUs.Filter = "(objectCategory=organizationalUnit)";
dsLookForOUs.SearchScope = SearchScope.Subtree;
dsLookForOUs.PropertiesToLoad.Add("cn");
dsLookForOUs.PropertiesToLoad.Add("ou");
dsLookForOUs.PropertiesToLoad.Add("telephoneNumber");

SearchResultCollection srcOUs = dsLookForOUs.FindAll();

foreach (SearchResult srOU in srcOUs)
{
  Console.WriteLine("{0}", srOU.Path);
  DirectoryEntry de = srOU.GetDirectoryEntry();
  if (de.Properties["TelephoneNumber"].Value!= null)
  {
    // Both solutions are working. Don't forget to commit

    //de.Properties["TelephoneNumber"].Clear();
    de.Properties["TelephoneNumber"].Value=null;
    de.CommitChanges();
  }
}
...