Die beste Möglichkeit, schnell festzustellen, ob ein Benutzerkonto Mitglied einer AD-Gruppe ist?

8

Ich habe derzeit einen Code, der eine Liste von Benutzern in einer Gruppe aufruft und dann durch diese Gruppe iteriert, um festzustellen, ob ein bestimmter Account existiert, aber es scheint, als sollte es einen prägnanteren (und vielleicht schnelleren) Weg geben erreiche das.

Dieser Code (VB.NET) versucht, die member-Eigenschaft des Gruppenobjekts zu verwenden, gibt aber auch dann false zurück, wenn der Benutzer Mitglied dieser Gruppe ist. Kann jemand sehen, was ich hier falsch mache?

%Vor%

Zu Ihrer Information: Die GetNetworkObject-Aufrufe geben nur ein Verzeichniseintrag-Objekt zurück. Ich habe bestätigt, dass das korrekte Objekt sowohl für die Gruppe als auch für das Benutzerobjekt zurückgegeben wird.

    
JohnFx 15.12.2008, 16:02
quelle

4 Antworten

18

Wenn Sie sich im .NET 3.5-Stack befinden, System.DirectoryServices.AccountManagement.dll-Assembly hat eine nette API über AD. Die folgende Methode kann implementiert werden, um Ihr Problem zu lösen:

%Vor%

Ich weiß nicht, wie diese Methode funktioniert, aber es ist eine saubere Lösung.

    
huseyint 15.12.2008, 16:21
quelle
2

Hier ist, was ich in der Vergangenheit in einem VBS-Skript verwendet habe, das sehr gut funktioniert hat:

%Vor%

Ich verwende dann ein InStr, um zu sehen, ob der Benutzer ein Teil dieser Gruppe ist:

%Vor%

Sie können das oben Angeführte möglicherweise in Ihrem Projekt anpassen.

Übrigens habe ich bemerkt, dass Sie in Ihrem Code gruppendoman als letzten Parameter für "Gruppe" haben. Nicht sicher, ob Sie möchten, dass Gruppendomain oder nicht:

Dim-Gruppe als DirectoryEntry = GetNetworkObject (GroupDomanName, NetworkObjectType.NetworkGroup, GroupName, gruppedoman )

vs

Dim-Gruppe As DirectoryEntry = GetNetworkObject (GroupDomanName, NetworkObjectType.NetworkGroup, GroupName, gruppendomäne )

Lass es mich wissen, wenn das hilft! JFV

    
JFV 15.12.2008 16:43
quelle
1

Ich habe eine Antwort gefunden, die in NET 2.0 zu funktionieren scheint, ist relativ schnell und überwindet das mögliche Problem von Gruppen mit mehr als 100 Elementen (die eine Bereichssuche erfordern)

Hier ist der Code, mit dem ich endete:

%Vor%     
JohnFx 15.12.2008 16:52
quelle
1

Hier ist eine andere Methode, die den Verzeichnissucher und memberOf verwendet. Dies verwendet die aktuelle Objekt-ID des aktuellen Benutzers, aber Sie können dies zu einem anderen Bezeichner ändern.

%Vor%

Wenn Sie Benutzereingaben verwenden möchten, die ungültige Zeichen enthalten könnten, sollten Sie ihnen immer entkommen ...

%Vor%     
dotjoe 15.12.2008 20:48
quelle