Доступ к Active Directory - PullRequest
       13

Доступ к Active Directory

1 голос
/ 21 декабря 2011

Мне нужен доступ к информации из активного каталога. Я использую код

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 голосов
/ 21 декабря 2011

Если вы используете .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;
    }
}
...