Ich habe einige Codes zu überprüfen, ob ein Domain-Benutzer ein Mitglied der Maschinen Gruppe Administratoren:Langsam AD-Gruppenmitgliedschaft Lookup
public static bool ActiveDirectoryGroupMembershipOk(string userid, string groupName)
{
using (PrincipalContext ctx = new PrincipalContext(ContextType.Machine, "my_pc_name"))
{
using (GroupPrincipal grp = GroupPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "administrators"))
{
if (grp != null)
{
foreach (Principal p in grp.GetMembers(false))
{
if (p is UserPrincipal && p.SamAccountName.Equals(userid, StringComparison.InvariantCultureIgnoreCase))
{
return true;
}
}
}
}
}
return false;
}
Es funktioniert, aber die folgende Code-Zeile dauert einige Sekunden dauern:
using (GroupPrincipal grp = GroupPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "administrators"))
Gibt es einen schnelleren Weg, die Mitgliedschaft zu suchen?
Ich weiß nicht, ob es wichtig ist oder nicht, aber die Benutzer-ID ist ein Domänenbenutzer und die Windows-Gruppe ist auf dem lokalen PC.
AD in meiner Erfahrung ist immer langsam, so neigen ich dazu, die Ergebnisse zwischenzuspeichern. In Ihrem Fall würde ich eine globale Variable der Klasse grp verwenden und FindByidentity nur einmal anrufen – Pikoh
Ich mache das pro Benutzer. So ist es meine erste Bitte, das ist langsam. Ich habe gerade einen anderen Beitrag gelesen, in dem ich die Mitgliedschaften des Benutzers und nicht die Mitglieder einer Gruppe betrachte - und das könnte schneller sein. [Link] (http://stackoverflow.com/questions/1675813/faster-way-to-find-out-if-a-user-exists-on-a-system) Aber ich konnte diesen Code nicht funktionieren. –