我正在创建一个应用程序的用户管理模块,该模块基本上会根据域登录详细信息验证用户凭据。认证不是问题,问题在于我需要获得特定用户的经理。
我使用以下方法检索用户的“Manager”属性:
DirectoryEntry de = new DirectoryEntry(path, user, pass, AuthenticationTypes.Secure);
DirectorySearcher ds = new DirectorySearcher();
ds.SearchRoot = new DirectoryEntry("LDAP://xyzDomain", "UserName", "pwd");
ds.Filter = "(|(&(objectCategory=person)(objectClass=user)(mailnickname=*domainalias*)))";
//ds.PropertyNamesOnly = true;
ds.PropertiesToLoad.Add("manager");
List<string> users = new List<string>();
string s = "undefined";
foreach (SearchResult sr in ds.FindAll())
{
DirectoryEntry dee = sr.GetDirectoryEntry();
s = (string)dee.Properties[""].Value ?? "<undefined>";
users.Add(s);
}
这会以这种方式返回管理器详细信息:
CN=First LastName,OU=Managers,OU=Engineering,OU=Central,OU=Something,DC=XYZ,DC=XYZ,DC=XYZRE
我所做的是使用字符串操作来提取CN,然后在该CN上运行查询以查找管理器的详细信息。然而问题是CN在这里不是唯一的。可能有两个或更多同名的人。我基本上需要的是一种方法,它返回用户的经理ALIAS(不是CN或任何东西)。
请提供任何帮助,我们将非常感谢。接受建议。 非常感谢
答案 0 :(得分:0)
有一个名为 mailNickname 的字段。
此链接:In active directory, what is mailNickname used for?包含有关它的更多信息。问题是:它用于Exchange服务器。
这意味着该值可以为null或为空。这是Visual Basic中的一个示例:http://www.vbforums.com/showthread.php?615131-RESOLVED-Get-logged-in-user-s-Alias-from-LDAP,它解释了如何以及如何使用。