“我想同时更新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();
}
答案 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