使用目录服务的分发列表中的子列表

Sublists in Distribution Lists using DirectoryServices

这是我从 .Net 构建的胜利表单,我需要获取每个安全组的成员。我们的一些安全组有子组,我需要程序能够通过子组的成员区分子组和 运行。

这是我的代码:

Dim thisDL As String = cmbADGroups.GetItemText(cmbADGroups.SelectedItem)
Dim dn As String = "CN=" & thisDL & ",OU=DistributionLists,DC=ThisDC,DC=com"
Dim ctx As PrincipalContext = New PrincipalContext(ContextType.Domain)
Dim group As GroupPrincipal = GroupPrincipal.FindByIdentity(ctx, 3, dn)
Dim members As PrincipalSearchResult(Of Principal) = group.GetMembers()
Dim PersonList = (From m In members
                  Order By m.DisplayName
                  Select New OaklawnPerson With {.userFullName = m.DisplayName,
                                                 .userID = m.SamAccountName,
                                                 .userEmail = m.UserPrincipalName,
                                                 .userFirstName = m.DisplayName.Split(",").Last()}).ToList
dgvSearchResults.DataSource = OaklawnPersonList

我的问题:
这在下面没有任何子分发列表时有效,但是当有一个或多个子列表时,我需要确定它确实是一个子列表并从中获取成员(即使有子列表的子列表)。
我不要求任何人为我编写代码,但也许会指出我需要去的方向。 感谢提供信息

结果将是 Principal 类型,但如果它是一个组,您会看到它是 GroupPrincipal。我主要是一名 C# 开发人员,但它会是这样的:

If TypeOf m Is GroupPrincipal Then ...

那你就可以把它当作一个整体来对待。我不确定您是否可以在 Linq 查询中完成它,因此您最好将其更改为 For Each 循环。

我有一些示例代码可以直接使用 DirectoryEntry(这是 GroupPrincipal 等在幕后使用的)直接执行此操作,我发现它要快得多。但我是用 C# 做的。当然可以翻译成VB.NET:Find all the members of a group