如何更新Active Directory用户的属性值

时间:2018-05-04 20:42:31

标签: c# active-directory ldap

“我想同时更新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 :(得分:0)

这可能是你的问题:

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

objectName参数是Dictionary<string, object>,但您将其用作字符串。当你这样做时,.NET调用对象上的.ToString()方法,这将最终成为你不想要的东西,比如“System.Collections.Generic.Dictionary`2 [System.String,System.Object] ]”。

这可能会让你的搜索变得混乱。

但是你还没有阅读搜索结果的属性。您只是在每个结果上调用.GetDirectoryEntry()。所以你甚至不需要设置PropertiesToLoad。所以就这样吧。

如果您确实想要从搜索结果中读取每个属性,则需要单独添加每个属性,因此您需要遍历Dictionary并将每个Key添加到{{1} }}:

PropertiesToLoad