我需要从活动目录中访问信息。我正在使用代码
DirectoryEntry entry = new DirectoryEntry("LDAP://domain", "AD_id", "password");
DirectorySearcher search = new DirectorySearcher(entry);
try
{
search.Filter = "(SAMAccountName=AD_id)";
search.PropertiesToLoad.Add("cn");
search.PropertiesToLoad.Add("sn");
search.PropertiesToLoad.Add("givenName");
search.PropertiesToLoad.Add("email");
SearchResult result = search.FindOne();
if (result != null)
lbl_result.Text = result.Path.ToString();
else
lbl_result.Text = "failier";
}
catch (Exception ex)
{
lbl_result.Text = ex.Message;
}
我成功地以给定格式获取了有关用户的一些信息
LDAP://domain/CN=username,OU=aaa,OU=bbb,OU=ccc,DC=domain,DC=com
但这不是我需要的完整信息,例如电子邮件地址不在上面的字符串中。(aaa,bbb和ccc是其他一些信息) 如果我做错了,请帮助我。 我是这种编程的新手。 我会很感激。
答案 0 :(得分:0)
如果您使用的是.NET 3.5及更高版本,则应查看System.DirectoryServices.AccountManagement
(S.DS.AM)命名空间。在这里阅读所有相关内容:
基本上,您可以定义域上下文并轻松在AD中查找用户和/或组:
// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");
if(user != null)
{
// do something here....
string emailAddress = user.EmailAddress;
}
UserPrincipal
类包含许多可以读出的属性(并为其设置新值)。
新的S.DS.AM让您可以轻松地与AD中的用户和群组一起玩!
当然 - 您也可以搜索用户!
您可以使用PrincipalSearcher
和“按示例查询”主体进行搜索:
// create your domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
// define a "query-by-example" principal - here, we search for a UserPrincipal
// and with the SAMAccountName of "ad_id"
UserPrincipal qbeUser = new UserPrincipal(ctx);
qbeUser.SamAccountName = "ad_id";
// create your principal searcher passing in the QBE principal
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);
// find all matches
foreach(var found in srch.FindAll())
{
// do whatever here - "found" is of type "Principal" - it could be user, group, computer.....
UserPrincipal foundUser = found as UserPrincipal;
if(foundUser != null)
{
// do something here....
string emailAddress = foundUser.EmailAddress;
}
}