0

这是我从 .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

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

4

1 回答 1

0

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

If TypeOf m Is GroupPrincipal Then ...

那么您可以将其视为一个组。我不确定您是否可以在 Linq 查询中实现这一点,因此您最好将其更改为For Each循环。

我有一些示例代码可以直接执行此操作DirectoryEntryGroupPrincipal无论如何,这都是 等在幕后使用的),我发现它要快得多。但我是在 C# 中做到的。当然也可以翻译成VB.NET:找到一个组的所有成员

于 2019-10-30T13:52:28.353 回答