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