グループのネストしているすべてのメンバーを表示する画面の Windows アプリの C# のコードです。
//パブリックコンストラクター
public AllMemberList(DomainGroup group)
{
InitializeComponent();
this.AddChildNode(group); //子ノードを追加
this.MemberTreeView.ExpandAll();
}
//プライベートメソッド
//子ノードを追加
private void AddChildNode(DomainGroup group)
{
var imageIndex = (int)group.Category;
var node = new TreeNode(group.Name, imageIndex, imageIndex);
this.MemberTreeView.Nodes.Add(node);
var members = DirectoryAccess.GetMembers(group); //グループのメンバーを取得
foreach (var member in members)
{
this.AddChildNode(node, member); //子ノードを追加
member.Dispose();
}
}
//子ノードを追加
private void AddChildNode(TreeNode node, DomainObject member)
{
var childNode = CreateNode(member); //ノードを作成
node.Nodes.Add(childNode);
if (member.Category == CategoryType.Group)
{
var subMembers = DirectoryAccess.GetMembers((DomainGroup)member); //グループのメンバーを取得
foreach (var subMember in subMembers)
{
this.AddChildNode(childNode, subMember); //子ノードを追加
subMember.Dispose();
}
}
}
//指定したメンバーのノードを作成
private TreeNode CreateNode(DomainObject member)
{
string displayName; //表示するテキスト
var fontColor = Color.Black;
switch (member.Category)
{
case CategoryType.User:
var user = (DomainUser)member;
displayName = String.Format("{0}({1}{2}:{3}/{4})",
user, user.LastName, user.FirstName, user.DisplayPath, user.Name);
fontColor = Color.Brown;
break;
case CategoryType.Group:
var group = (DomainGroup)member;
displayName = String.Format("{0}({1}:{2})", group, group.Scope, group.DisplayPath);
fontColor = Color.Blue;
break;
case CategoryType.Computer:
var pc = (Computer)member;
string sp = null;
if (pc.OperatingSystemServicePack != null)
{
sp = pc.OperatingSystemServicePack.Replace("Service Pack ", " SP");
}
displayName = String.Format("{0}({1}{2}:{3})", pc, pc.OperatingSystem, sp, pc.Role);
fontColor = Color.Green;
break;
default: //CategoryType.ForeignSecurityPrincipal
displayName = String.Format("{0}({1})", member, member.Name);
break;
}
var imageIndex = (int)group.Category;
return new TreeNode(displayName, imageIndex, imageIndex) { Name = member.Name, ForeColor = fontColor };
}
説明は VB の方に書いてますのでそちらをご覧ください。
Active Directory 関連 Blog
http://www.pbyk.com/blog/bloglist.html