Есть ли способ отличить «учетные записи пользователей» и «учетные записи пользователей компьютеров»? - PullRequest
6 голосов
/ 24 июня 2011

При запросе Active Directory для пользователей - есть ли способ отфильтровать учетные записи пользователей, созданные для компьютеров?В идеале способ, который распространен в большинстве типичных сетей.например:

DirectorySearcher ds = new DirectorySearcher(new DirectoryEntry([Users_OU_root]));    
ds.filter = "(&(objectClass=User)([CRITERIA_TO_FILTER_OUT_COMPUTER_USER_ACCOUNTS]))";    
ds.FindAll();    
...

Ответы [ 2 ]

6 голосов
/ 24 июня 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....     
}

// find the group in question
GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "YourGroupNameHere");

// if found....
if (group != null)
{
   // iterate over members
   foreach (Principal p in group.GetMembers())
   {
      Console.WriteLine("{0}: {1}", p.StructuralObjectClass, p.DisplayName);
      // do whatever you need to do to those members
   }
}

Новый S.DS.AM позволяет очень легко играть с пользователями и группами в AD:

Учетные записи компьютеров будут отображаться как ComputerPrincipal (получено из Principal), так что вы можете легко разделять учетные записи пользователей и компьютеров.

Если вы не можете или не хотите переходить на S.DS.AM - вы также можете разделить пользователя и компьютеры, используя objectCategory вместо objectClass в вашем фильтре LDAP. objectCategory в любом случае выгоден, поскольку он проиндексирован, а не многозначен, поэтому производительность запросов будет намного выше.

Для реального пользователя используйте objectCategory = Person, а для компьютера используйте objectCategory = Computer в вашем фильтре LDAP.

3 голосов
/ 27 июня 2011

Даже если я согласен с ответом. Active-Directory остается сервером LDAP. Вот фильтр, который вы ищете:

(&(objectCategory=user)(objectClass=user)(...))

'objectCategory=user' - это сокращение для 'objectCategory=CN=User,CN=Schema,CN=Configuration,DC=dom,DC=fr', понимаемое Active-Directory, но также и в других каталогах, поэтому я добавляю ответ, даже если принят другой ответ.

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