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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top