Списки в списках рассылки с использованием DirectoryServices - PullRequest
0 голосов
/ 30 октября 2019

Это выигрышная форма, которую я собираю из .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

Мой вопрос:
Это работает, когда нет подсписков, но когда есть один или несколько подсписков, мне нужно определить, что это действительно подсписок, и получить членов из него (и даже если есть подпунктподпункт).
Я не прошу никого писать код для меня, но, возможно, укажет мне направление, в котором я должен идти. Спасибо за информацию

1 Ответ

0 голосов
/ 30 октября 2019

Результаты будут иметь тип Principal, но если это группа, вы увидите, что это GroupPrincipal. Я в первую очередь разработчик C #, но это будет что-то вроде:

If TypeOf m Is GroupPrincipal Then ...

, тогда вы можете рассматривать это как группу. Я не уверен, что вы можете выполнить это в запросе Linq, так что, возможно, вам лучше поменять его на For Each цикл.

У меня есть пример кода, чтобы сделать это напрямую с DirectoryEntry (это то, что GroupPrincipal и т. д. в любом случае используется за кулисами), что я считаю гораздо быстрееНо я сделал это в C #. Конечно, его можно перевести на VB.NET: Найти всех членов группы

...