如何在Active Directory中获取完整的组列表?
查看System.DirectoryServices(ASP.NET 2.0参考):
C#-example获取组:
using System.DirectoryServices; public class test { private void main() { foreach (string @group in GetGroups()) { Debug.Print(@group); } } public ListGetGroups() { DirectoryEntry objADAM = default(DirectoryEntry); // Binding object. DirectoryEntry objGroupEntry = default(DirectoryEntry); // Group Results. DirectorySearcher objSearchADAM = default(DirectorySearcher); // Search object. SearchResultCollection objSearchResults = default(SearchResultCollection); // Results collection. string strPath = null; // Binding path. List result = new List (); // Construct the binding string. strPath = "LDAP://stefanserver.stefannet.local"; //Change to your ADserver // Get the AD LDS object. try { objADAM = new DirectoryEntry(strPath); objADAM.RefreshCache(); } catch (Exception e) { throw e; } // Get search object, specify filter and scope, // perform search. try { objSearchADAM = new DirectorySearcher(objADAM); objSearchADAM.Filter = "(&(objectClass=group))"; objSearchADAM.SearchScope = SearchScope.Subtree; objSearchResults = objSearchADAM.FindAll(); } catch (Exception e) { throw e; } // Enumerate groups try { if (objSearchResults.Count != 0) { foreach (SearchResult objResult in objSearchResults) { objGroupEntry = objResult.GetDirectoryEntry(); result.Add(objGroupEntry.Name); } } else { throw new Exception("No groups found"); } } catch (Exception e) { throw new Exception(e.Message); } return result; } }
VB示例获取组:
Imports System.DirectoryServices Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For Each group As String In GetGroups() Debug.Print(group) Next End Sub Public Function GetGroups() As List(Of String) Dim objADAM As DirectoryEntry ' Binding object. Dim objGroupEntry As DirectoryEntry ' Group Results. Dim objSearchADAM As DirectorySearcher ' Search object. Dim objSearchResults As SearchResultCollection ' Results collection. Dim strPath As String ' Binding path. Dim result As New List(Of String) ' Construct the binding string. strPath = "LDAP://stefanserver.stefannet.local" 'Change to your ADserver ' Get the AD LDS object. Try objADAM = New DirectoryEntry(strPath) objADAM.RefreshCache() Catch e As Exception Throw e End Try ' Get search object, specify filter and scope, ' perform search. Try objSearchADAM = New DirectorySearcher(objADAM) objSearchADAM.Filter = "(&(objectClass=group))" objSearchADAM.SearchScope = SearchScope.Subtree objSearchResults = objSearchADAM.FindAll() Catch e As Exception Throw e End Try ' Enumerate groups Try If objSearchResults.Count <> 0 Then Dim objResult As SearchResult For Each objResult In objSearchResults objGroupEntry = objResult.GetDirectoryEntry result.Add(objGroupEntry.Name) Next objResult Else Throw New Exception("No groups found") End If Catch e As Exception Throw New Exception(e.Message) End Try Return result End Function End Class