我的代码用于获取AD特定用户的详细信息。
SearchResultCollection results;
DirectorySearcher ds = null;
DirectoryEntry de = new
DirectoryEntry("LDAP://****");
SearchResult sr;
ds = BuildUserSearcher(de);
ds.Filter = string.Format("(&(objectClass=user)(|(&(SAMAccountName={0}*))))", model.User.Username.Trim());
sr = ds.FindOne();
public DirectorySearcher BuildUserSearcher(DirectoryEntry de)
{
DirectorySearcher ds = null;
ds = new DirectorySearcher(de);
ds.PropertiesToLoad.Add("department");
// Full Name
ds.PropertiesToLoad.Add("name");
// Email Address
ds.PropertiesToLoad.Add("mobile");
// First Name
ds.PropertiesToLoad.Add("givenname");
// Last Name (Surname)
// Login Name
ds.PropertiesToLoad.Add("userPrincipalName");
// Distinguished Name
ds.PropertiesToLoad.Add("distinguishedName");
ds.PropertiesToLoad.Add("sn");
return ds;
}
代码是工作的,并返回值,但不是按照要求,它是返回我这些属性。
"distinguishedname"
"userprincipalname"
"givenname"
"sn"
"name"
"adspath"
它没有从方法中返回属性,我必须需要部门?任何想法
我的广告路径值如下
""LDAP://CN=John cena,OU=Developers,OU=IT Department,OU=Users Acounts,DC=Mumbai,DC=Local""
有什么办法可以从这个网址得到它"OU=IT Department
"
希望得到您的建议
谢谢
该AD账户是否有一个值在 department
属性?如果该属性为空,它将不会出现在 Properties
收集在所有。这很正常。
所以你必须使用 sr.Properties.Contains("department")
以在你尝试使用它之前检查该值是否存在。
补充一点:你的 BuildUserSearcher
可以简化成这样。
public DirectorySearcher BuildUserSearcher(DirectoryEntry de)
{
return new DirectorySearcher(de) {
PropertiesToLoad = {
"department",
"name", // Full Name
"mobile", // Email Address
"givenname", // First Name
"userPrincipalName", // Login Name
"distinguishedName", // Distinguished Name
"sn" // Last Name (Surname)
}
};
}
功能上没有区别,只是代码更短而已。