0

これは、.Net から構築している win フォームであり、各セキュリティ グループのメンバーを取得する必要があります。一部のセキュリティ グループにはサブグループがあり、それを区別してサブグループのメンバーを処理できるプログラムが必要です。

これが私のコードです:

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 つ以上のサブリストがある場合は、それが実際にサブリストであることを特定し、そこからメンバーを取得する必要があります (さらに、サブ)。
だれかにコードを書いてほしいと言っているわけではありませんが、進むべき方向を教えてくれるかもしれません。情報のおかげで

4

1 に答える 1

0

結果のタイプは になりPrincipalますが、グループの場合はGroupPrincipal. 私は主に C# 開発者ですが、次のようなものになります。

If TypeOf m Is GroupPrincipal Then ...

その後、グループとして扱うことができます。Linq クエリでそれを実行できるかどうかわからないので、それをFor Eachループに変更した方がよいかもしれません。

これを直接行うためのサンプルコードがいくつかありますDirectoryEntry(これはGroupPrincipal、とにかく舞台裏で使用するものです)。これははるかに高速です。しかし、私はC#でそれをしました。もちろん、VB.NET に翻訳することもできます:グループのすべてのメンバーを見つける

于 2019-10-30T13:52:28.353 に答える