Hier finden Sie eine Liste von Mitgliedern einer Gruppe WinNT
-
05-07-2019 - |
Frage
Es gibt ein paar Fragen ähnlich wie diesen auf Stack-Überlauf, aber nicht ganz gleich.
Ich möchte öffnen oder erstellen, eine lokale Gruppe auf einem XP-Computer gewinnen und fügen Sie Mitglieder hinzu, Domäne, lokale und auch Konten bekannt. Ich möchte auch prüfen, ob ein Benutzer bereits ein Mitglied, so dass ich das gleiche Konto zweimal nicht stimmen, und vermutlich eine Ausnahme erhalten.
Bisher habe ich mit dem WinNT://
Anbieter mit dem Directory Objekt gestartet. Das geht in Ordnung, aber ich bin fest, wie eine Liste der Mitglieder einer Gruppe zu bekommen?
Wer weiß, wie dies zu tun? Oder eine bessere Lösung als Directory mit?
Lösung
Okay, es hat eine Weile gedauert, mit verschiedenen Lösungen rumgespielt, aber die, die am besten mit meiner ursprünglichen Frage passt ist unten angegeben. Ich kann nicht die Directory Objekt erhalten die Mitglieder einer lokalen Gruppe, um auf die ‚Standard‘ Methoden verwenden, die einzige Art, wie ich es die Mitglieder aufzuzählen bekommen konnte, war durch die Invoke-Methode unter Verwendung der nativen Objekte Mitglieder-Methode aufrufen.
using(DirectoryEntry groupEntry = new DirectoryEntry("WinNT://./Administrators,group")) { foreach(object member in (IEnumerable) groupEntry.Invoke("Members")) { using(DirectoryEntry memberEntry = new DirectoryEntry(member)) { Console.WriteLine(memberEntry.Path); } } }
Ich habe auch eine ähnliche Technik hinzuzufügen, und die Mitglieder der lokalen Gruppe zu entfernen.
Hoffentlich hilft dies jemand anderes. Keith.
Bearbeiten durch Tim: hinzugefügt VB.Net Version
Public Function MembersOfGroup(ByVal GroupName As String) As List(Of DirectoryEntry)
Dim members As New List(Of DirectoryEntry)
Try
Using search As New DirectoryEntry("WinNT://./" & GroupName & ",group")
For Each member As Object In DirectCast(search.Invoke("Members"), IEnumerable)
Dim memberEntry As New DirectoryEntry(member)
members.Add(memberEntry)
Next
End Using
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
Return members
End Function
Andere Tipps
Microsoft .NET Framework bietet eine Standard-Bibliothek für die Arbeit mit Active Directory: System.DirectoryServices-Namespace in der System.DirectoryServices.dll.
Microsoft empfiehlt die Verwendung von zwei Hauptklassen von dem System.DirectoryServices-Namespace: Directory und Directory . In den meisten Fällen genügt es, nur Directory Klasse zu verwenden.
UPDATE: Ich habe es auf meinem Rechner getestet - es funktioniert. Aber vielleicht habe ich falsch verstanden Ihre Frage.
Hier ist ein Beispiel von einem ausgezeichneten Codeproject Artikel :
Hier finden Sie eine Liste der Benutzer der Zugehörigkeit zu einer bestimmten AD-Gruppe
using System.DirectoryServices;
ArrayList GetADGroupUsers(string groupName)
{
SearchResult result;
DirectorySearcher search = new DirectorySearcher();
search.Filter = String.Format("(cn={0})", groupName);
search.PropertiesToLoad.Add("member");
result = search.FindOne();
ArrayList userNames = new ArrayList();
if (result != null)
{
for (int counter = 0; counter <
result.Properties["member"].Count; counter++)
{
string user = (string)result.Properties["member"][counter];
userNames.Add(user);
}
}
return userNames;
}
sollten Sie in der Lage sein, diese Informationen innerhalb der "member"
Attribut auf dem DirectoryEntry
, die die Gruppe darstellt.