グループのネストしているすべてのメンバーを表示する画面の Windows アプリの VB のコードです。
'パブリックコンストラクター
Public Sub New(group As DomainGroup)
InitializeComponent()
Me.AddChildNode(group) '子ノードを追加
Me.MemberTreeView.ExpandAll()
End Sub
'プライベートメソッド
'子ノードを追加
Private Sub AddChildNode(group As DomainGroup)
Dim node As New TreeNode(group.Name, group.Category, group.Category)
Me.MemberTreeView.Nodes.Add(node)
Dim members = DirectoryAccess.GetMembers(group) 'グループのメンバーを取得
For Each member In members
Me.AddChildNode(node, member) '子ノードを追加
member.Dispose()
Next
End Sub
'子ノードを追加
Private Sub AddChildNode(node As TreeNode, member As DomainObject)
Dim childNode = CreateNode(member) 'ノードを作成
node.Nodes.Add(childNode)
If member.Category = CategoryType.Group Then
Dim subMembers = DirectoryAccess.GetMembers(DirectCast(member, DomainGroup)) 'グループのメンバーを取得
For Each subMember In subMembers
Me.AddChildNode(childNode, subMember) '子ノードを追加
subMember.Dispose()
Next
End If
End Sub
'指定したメンバーのノードを作成
Private Function CreateNode(member As DomainObject) As TreeNode
Dim displayName As String '表示するテキスト
Dim fontColor As Color
Select Case member.Category
Case CategoryType.User
Dim user = DirectCast(member, DomainUser)
displayName = String.Format("{0}({1}{2}:{3}/{4})",
user, user.LastName, user.FirstName, user.DisplayPath, user.Name)
fontColor = Color.Brown
Case CategoryType.Group
Dim group = DirectCast(member, DomainGroup)
displayName = String.Format("{0}({1}:{2})", group, group.Scope, group.DisplayPath)
fontColor = Color.Blue
Case CategoryType.Computer
Dim pc = DirectCast(member, Computer)
Dim sp As String = Nothing
If pc.OperatingSystemServicePack IsNot Nothing Then
sp = pc.OperatingSystemServicePack.Replace("Service Pack ", " SP")
End If
displayName = String.Format("{0}({1}{2}:{3})", pc, pc.OperatingSystem, sp, pc.Role)
fontColor = Color.Green
Case Else 'CategoryType.ForeignSecurityPrincipal
displayName = String.Format("{0}({1})", member, member.Name)
End Select
Return New TreeNode(displayName, member.Category, member.Category) With {.Name = member.Name, .ForeColor = fontColor}
End Function
コンストラクターで受け取っているグループは、呼出し元のグループリスト画面で選択されたグループです。
まず、AddChildNode(DomainGroup) メソッドで TreeView に対象グループのノードを追加してます。
次に DirectoryAccess.GetMembers メソッドを呼び出してグループのメンバーを取得し、そのメンバーに対して AddChildNode(TreeNode, DomainObject) メソッドを呼び出して ノードに子ノードを追加してます。
AddChildNode(TreeNode, DomainObject) メソッドでは、CreateNode メソッドを呼び出してメンバーのノードを作成してノードに追加してます。
メンバーがグループの場合は再帰的に呼び出してメンバーのノードを追加してます。
CreateNode メソッドでは、メンバーの種類ごとに表示するテキストとフォントの色を設定してノードを作成してます。
Active Directory 関連 Blog
http://www.pbyk.com/blog/bloglist.html