2011-06-24 20 views
6

Podczas wysyłania zapytania do Active Directory dla użytkowników - czy istnieje sposób na odfiltrowanie kont użytkowników utworzonych dla komputerów? Idealny sposób, który jest wspólny dla większości typowych sieci. np .:Czy można rozróżnić "konta użytkowników" i "konta użytkowników komputerów"?

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

Odpowiedz

6

Jeśli jesteś na .NET 3.5 iw górę, należy zapoznać się z nazw (S.DS.AM) System.DirectoryServices.AccountManagement. Przeczytać o tym tutaj:

Zasadniczo, można określić kontekst domeny i łatwo znaleźć użytkowników i/lub grupy w 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 
    } 
} 

nowy S.DS.AM ułatwia zabawę z użytkownikami i grupami w AD:

Konta komputera będą wyświetlane jako ComputerPrincipal (pochodzące z Principal) - dzięki czemu można z łatwością rozdzielić konta użytkowników i komputerów.

Jeśli nie możesz lub nie chcesz przejść do S.DS.AM - możesz również rozdzielić użytkownika i komputery, używając parametru objectCategory zamiast obiektu objectClass w filtrze LDAP. objectCategory i tak jest korzystny, ponieważ jest indeksowany, a nie wielowartościowy - więc wydajność zapytań będzie znacznie lepsza.

Dla prawdziwego użytkownika użyj objectCategory = Person, natomiast dla komputera użyj objectCategory = Computer w filtrze LDAP.

3

Nawet jeśli zgadzam się z odpowiedzią. Active-Directory pozostaje serwerem LDAP. Oto filtr szukasz:

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

objectCategory=user” jest skrótem dla „objectCategory=CN=User,CN=Schema,CN=Configuration,DC=dom,DC=fr” zrozumiałym Active-Directory, ale także sposób, w innych katalogach, dlatego mogę umieścić odpowiedź, nawet jeśli inna odpowiedź jest akceptowana.

Powiązane problemy