如果我将.NET DirectoryEntry.Path设置为:
LDAP://CN=John Smith,OU=Group Name,DC=example,DC=com
一切都很好,我得到了我需要的DirectoryEntry。但是,我不知道用户的真实通用名称(CN)。我只知道他们的用户名,“John.Smith”。
那么,我该如何查询用户名?我尝试了以下所有没有成功:
LDAP://CN=John.Smith,OU=Group Name,DC=example,DC=com
LDAP://sAMAccountName=John.Smith,OU=Group Name,DC=example,DC=com
LDAP://userPrincipalName=John.Smith,OU=Group Name,DC=example,DC=com
LDAP://userPrincipalName=John.Smith@example.com,OU=Group Name,DC=example,DC=com
LDAP://uid=John.Smith,OU=Group Name,DC=example,DC=com
LDAP://o=John.Smith,OU=Group Name,DC=example,DC=com
答案 0 :(得分:11)
您不能只通过创建LDAP字符串进行查询 - 您需要使用代码。
类似的东西:
DirectoryEntry deRoot = new DirectoryEntry("LDAP://yourserver/CN=Users,dc=YourCompany,dc=com");
DirectorySearcher dsFindUser = new DirectorySearcher(deRoot);
dsFindUser.SearchScope = SearchScope.SubTree;
dsFindUser.PropertiesToLoad.Add("sn"); // surname = last name
dsFindUser.PropertiesToLoad.Add("givenName"); // first name
dsFindUser.Filter = string.Format("(&(objectCategory=Person)(anr={0}))", yourUserName);
SearchResult rseult = dsFindUser.FindOne();
if(result != null)
{
if(result.Properties["sn"] != null)
{
string lastName = result.Properties["sn"][0].ToString();
}
if(result.Properties["givenName"] != null)
{
string lastName = result.Properties["givenName"][0].ToString();
}
}
可以在MSDN上找到System.DirectoryServices.DirectorySearcher类上的完整MSDN文档 - 它有许多其他属性和设置。
如果您使用的是.NET 3.5,使用强类型的例程库来处理用户和组时,事情变得更加容易了 - 有关详细信息,请参阅此主题的MSDN article。
希望这有帮助
马克