Как обновить значения свойств пользователя Active Directory - PullRequest
0 голосов
/ 04 мая 2018

"Я хочу обновить значения нескольких свойств пользователя Active Directory одновременно, Я пытаюсь следующий метод, но он не проходит ... "

       public void SetAdInfo(string objectFilter, 
                  Dictionary<string, object> objectName, 
                  string ldapPath)
    {
        string connectionPrefix = "LDAP://" + ldapPath;
        DirectoryEntry entry = new DirectoryEntry(connectionPrefix);
        DirectorySearcher mySearcher = new DirectorySearcher(entry);
        mySearcher.Filter = "(cn=" + objectFilter + ")";
        mySearcher.PropertiesToLoad.Add("" + objectName + "");
        SearchResult result = mySearcher.FindOne();
        if (result != null)
        {
            DirectoryEntry entryToUpdate = result.GetDirectoryEntry();

                foreach (var prop in objectName)
                {

                    entryToUpdate.Properties[prop.Key].Value = prop.Value;

                entryToUpdate.CommitChanges();
                }

        }
        entry.Close();
        entry.Dispose();
        mySearcher.Dispose();
    }

1 Ответ

0 голосов
/ 07 мая 2018

Это, вероятно, ваша проблема прямо здесь:

mySearcher.PropertiesToLoad.Add("" + objectName + "");

Параметр objectName - это Dictionary<string, object>, но вы используете его как строку. Когда вы сделаете это, .NET вызывает метод .ToString() для объекта, который в итоге окажется чем-то, что вам не нужно, например «System.Collections.Generic.Dictionary`2 [System.String, System.Object]» .

Вероятно, это мешает вашему поиску.

Но вы все равно не читаете свойства результатов поиска. Вы просто звоните .GetDirectoryEntry() на каждый результат. Так что вам даже не нужно устанавливать PropertiesToLoad. Так что просто возьми эту строку.

Если вы хотите прочитать каждое свойство из результатов поиска, вам нужно добавить каждое свойство по отдельности, поэтому вам нужно будет выполнить цикл по Dictionary и добавить каждое Key к PropertiesToLoad:

foreach (var prop in objectName) {
    mySearcher.PropertiesToLoad.Add(prop.Key);
}
...