Active Directory访问

时间:2011-12-21 09:45:15

标签: .net active-directory ldap

我需要从活动目录中访问信息。我正在使用代码

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是其他一些信息) 如果我做错了,请帮助我。 我是这种编程的新手。 我会很感激。

1 个答案:

答案 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;
    }
}