Как определить тип (пользователя AD и группы AD) учетной записи? - PullRequest
3 голосов
/ 04 декабря 2009

У меня есть вопрос об определении типа (пользователя или группы) имени учетной записи.
Например, у меня есть две строки, скажем "Adventure-works \ david" и "Adventure-works \ admins", первый представляет пользователя с именем david, а второй представляет группу AD.

Мой вопрос: как я могу определить тип (пользователя или группы AD) этой учетной записи? Есть ли удобный метод, который я могу использовать?

Любые комментарии приветствуются. Спасибо.

1 Ответ

10 голосов
/ 04 декабря 2009

Какая версия .NET вы на ??

Если вы работаете в .NET 3.5, посмотрите эту превосходную статью MSDN о том, как интерфейс Active Directory немного изменился.

Если вы используете .NET 3.5, вы можете написать:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN");
Principal myObject = Principal.FindByIdentity(ctx, "your name value");

Как правило, вам нужно передать только имя пользователя - часть после обратной косой черты, а не всю строку DOMAIN \ USERNAME.

Этот "Принципал" теперь является либо UserPrincipal, либо GroupPrincipal (или это может быть другой тип участника, например ComputerPrincipal):

if(myObject is UserPrincipal)
{
    // you have a user
}
else if(myObject is GroupPrincipal)
{
    // you have a group
}

и вы можете идти оттуда.


Если вы используете .NET 1.x / 2.0 / 3.0, вам придется использовать более сложную процедуру создания DirectorySearcher и поиска вашего объекта:

// create root DirectoryEntry for your search
DirectoryEntry deRoot = new DirectoryEntry("LDAP://dc=YourCompany,dc=com");

// create searcher            
DirectorySearcher ds = new DirectorySearcher(deRoot);

ds.SearchScope = SearchScope.Subtree;

// define LDAP filter - all you can specify is the "anr" (ambiguous name
// resolution) attribute of the object you're looking for
ds.Filter = string.Format("(anr={0})", "YourNameValue");

// define properties you want in search result(s)
ds.PropertiesToLoad.Add("objectCategory");
ds.PropertiesToLoad.Add("displayName");

// search
SearchResult sr = ds.FindOne();

// check if we get anything back, and if we can check the "objectCategory" 
// property in the search result
if (sr != null)
{
    if(sr.Properties["objectCategory"] != null)
    {
       // objectType will be "Person" or "Group" (or something else entirely)
       string objectType = sr.Properties["objectCategory"][0].ToString();
    }
}

Марк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...