W aplikacji internetowej chcemy wyświetlić listę kont sam dla użytkowników, którzy są członkami określonej grupy. Grupy mogą mieć w wielu przypadkach 500 lub więcej członków, a my potrzebujemy reakcji strony.Szybki sposób na uzyskanie listy członków grupy w Active Directory za pomocą C#
Z grupą około 500 członków, trwa 7-8 sekund, aby uzyskać listę kont sam dla wszystkich członków grupy. Czy są szybsze sposoby? Wiem, że konsola zarządzania usługą Active Directory robi to w ciągu sekundy.
Próbowałem kilka metod:
1)
PrincipalContext pcRoot = new PrincipalContext(ContextType.Domain)
GroupPrincipal grp = GroupPrincipal.FindByIdentity(pcRoot, "MyGroup");
List<string> lst = grp.Members.Select(g => g.SamAccountName).ToList();
2)
PrincipalContext pcRoot = new PrincipalContext(ContextType.Domain)
GroupPrincipal grp = GroupPrincipal.FindByIdentity(pcRoot, "MyGroup");
PrincipalSearchResult<Principal> lstMembers = grp.GetMembers(true);
List<string> lst = new List<string>();
foreach (Principal member in lstMembers)
{
if (member.StructuralObjectClass.Equals("user"))
{
lst.Add(member .SamAccountName);
}
}
3)
PrincipalContext pcRoot = new PrincipalContext(ContextType.Domain)
GroupPrincipal grp = GroupPrincipal.FindByIdentity(pcRoot, "MyGroup");
System.DirectoryServices.DirectoryEntry de = (System.DirectoryServices.DirectoryEntry)grp.GetUnderlyingObject();
List<string> lst = new List<string>();
foreach (string sDN in de.Properties["member"])
{
System.DirectoryServices.DirectoryEntry deMember = new System.DirectoryServices.DirectoryEntry("LDAP://" + sDN);
lst.Add(deMember.Properties["samAccountName"].Value.ToString());
}
Jest to podobne do przykładu 3 w moim pytaniu, część, która pobiera czas logu, interweniuje poprzez każdy element we właściwości członka. – Jeremy
musicie pokochać notację węgierską, niektóre archaiczne pozostałości z oryginalnego przykładu: –