Как правильно установить / получить свойство DepartmentNumber в Active Directory с помощью C #? - PullRequest
0 голосов
/ 02 апреля 2012

Я пытался прочитать и установить свойство DepartmentNumber для объекта DirectoryEntry , используя C #, но у меня всегда возникает проблема, что при использовании ADSI Edit я не вижу ничего вэта запись была изменена.

Подходы, которые я до сих пор пробовал, включают:

directoryEntry.Properties["departmentNumber"].Value = new object[]{ "SomeContent" };

и

directoryEntry.InvokeSet("departmentNumber", new object[]{ "SomeContent" };

и

directoryEntry.Invoke("PutEx", new object[]{ 2, "departmentNumber", new object[]{"SomeContent"}});

и

directoryEntry.Invoke("Put", new object[]{ "departmentNumber", "SomeContent" });

Обновление За всем вышеперечисленным следует directoryEntry.CommitChanges (); .

Что бы я ни пытался, я делаю (с некоторыми из приведенных выше примеров) получить результаты с точки зрения возможности повторного считывания значения с использованием соответствующего кода, но всякий раз, когда я использую ADSI-редактор и смотрю на свойства пользователя, я не вижу, что DepartmentNumber содержит какие-либо данные.

Если я установлю для свойства определенное значение с помощью ADSI-Editor, я также не смогу запросить это конкретное значение через C #, но я могу использовать очень простой скрипт VB, как показано ниже:

Set objUser = GetObject("LDAP://CN=........")
objUser.GetInfo
objUser.PutEx 2, "departmentNumber", Array("SomeContent")

Это меняет значение свойствачто я вижу в ADSI-редакторе, но опять же, используя C #, я не могу его прочитать.

В чем здесь проблема, и почему она выглядит так, как будто есть два разных свойства "DepartmentNumber"?Несмотря на попытки найти кого-то с той же проблемой, я не нашел ни ответов, ни указателей в правильном направлении, поэтому любая помощь очень ценится.Пожалуйста, спросите, если вам нужна дополнительная информация.

1 Ответ

2 голосов
/ 02 апреля 2012

Вы просто забыли зафиксировать изменения. Это необходимо в ADSI. Вот пример создания и модификации пользователя:

static void Main(string[] args)
{
  /* Connection to Active Directory
   */
  DirectoryEntry deBase = new DirectoryEntry("LDAP://192.168.225.100:389/OU=SousMonou,OU=MonOu,DC=dom,DC=fr", "jpb", "pwd");

  /* User creation
  */
  DirectoryEntry auser = deBase.Children.Add("cn=a User", "user");
  auser.CommitChanges();

  auser.Properties["samaccountname"].Value = "AUser";
  auser.Properties["givenName"].Value = "A";
  auser.Properties["sn"].Value = "User";
  auser.Properties["displayName"].Value = "AUser";
  auser.Properties["userPrincipalName"].Value = "AUser@dom.fr";
  auser.Properties["pwdLastSet"].Value = 0;
  auser.Properties["userAccountControl"].Value = 544;

  auser.CommitChanges();

  /* Retreiving the user
  */
  DirectorySearcher dsLookForDomain = new DirectorySearcher(deBase);
  dsLookForDomain.Filter = "(&(cn=a User))";
  dsLookForDomain.SearchScope = SearchScope.Subtree;

  SearchResult srUser = dsLookForDomain.FindOne();
  if (srUser != null)
  {
    DirectoryEntry deUser = srUser.GetDirectoryEntry();
    deUser.Properties["departmentNumber"].Value = "Test Department";
    deUser.CommitChanges();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...