一、DirectoryEntry类的Path属性
Path 属性唯一地标识网络环境中的此项。始终可以使用此 Path 检索此项。
设置 Path 将从目录存储区检索新项;它不更改当前绑定的项的路径。
与 DirectoryEntry 组件关联的类可以与任何 Active Directory 服务提供程序一起使用。当前的一些提供程序包括 Internet 信息服务 (IIS)、轻量目录访问协议 (LDAP)、Novell NetWare 目录服务 (NDS) 和 WinNT。
注意 Path 的一部分,它标识提供程序(在“://”前面),并且区分大小写。例如,“LDAP://”或“WinNT://”。
Path 属性的语法随提供程序不同而不同。一些常见的情况有:
WinNT
- 连接到计算机上的组。例如“WinNT://<域名>/<计算机名>/<组名>”。如果是连接到本地计算机,则为“WinNT://<计算机名>/<组名>”。
- 连接到计算机上的用户。例如“WinNT://<域名>/<计算机名>/<用户名>”。如果是连接到本地计算机,则为“WinNT://<计算机名>/<用户名>”。
- 连接到计算机上的服务。例如,“WinNT://<域名>/<计算机名>/<服务名>”。如果是连接到本地计算机,则为“WinNT://<计算机名>/<服务名>”。
- 发现网络上的所有域。例如,“WinNT:”。通过枚举此项的子级可以找到这些域。
LDAP
- 连接到域中的组。例如“LDAP://CN=<组名>, CN =<用户>, DC=<域控制器 1>, DC=<域控制器 2>,...”。
- 连接到域中的用户。例如“LDAP://CN=<完整用户名>, CN=<用户>, DC=<域控制器 1>, DC=<域控制器 2>,...”。
- 连接到域中的计算机。例如“LDAP://CN=<计算机名>, CN=<计算机>, DC=<域控制器 1>, DC=<域控制器 2>,...”。
IIS
- 连接到 Web 目录。例如“IIS://LocalHost/W3SVC/1/ROOT/<Web 目录名>”。
引用地址:DirectoryEntry.Path
二、跟目录服务相关的几个接口
跟目录服务相关的几个接口包括 IADs,IADsContainer,IADsUser,IADsGroup等,详细资料请参考MSDN。
三、列举本机的用户,用户组及Windows服务
运行效果:

示例代码:
private void RefreshDirectory()

{
string path = "WinNT://" + System.Environment.MachineName;
DirectoryEntry entryPC = new DirectoryEntry(path);
TreeNode users = new TreeNode("Users");
TreeNode groups = new TreeNode("Groups");
TreeNode services = new TreeNode("Services");

viewPC.Nodes.AddRange(new TreeNode[]
{ users, groups, services });

foreach(System.DirectoryServices.DirectoryEntry child
in entryPC.Children)

{
TreeNode newNode = new TreeNode(child.Name);
switch (child.SchemaClassName)

{
case "User" :
users.Nodes.Add(newNode);
break;
case "Group" :
groups.Nodes.Add(newNode);
break;
case "Service" :
services.Nodes.Add(newNode);
break;
}
AddPathAndProperties(newNode, child);
}
}

private void AddPathAndProperties(TreeNode node,
System.DirectoryServices.DirectoryEntry entry)

{
node.Nodes.Add(new TreeNode("Path: " + entry.Path));
TreeNode propertyNode = new TreeNode("Properties");
node.Nodes.Add(propertyNode);
foreach (string propertyName in entry.Properties.PropertyNames)

{
string oneNode = propertyName + ": " +
entry.Properties[propertyName][0].ToString();
propertyNode.Nodes.Add(new TreeNode(oneNode));
}
} 四、新增组:
private void button3_Click(object sender, System.EventArgs e)

{
string path = String.Format("WinNT://{0}",System.Environment.MachineName);
DirectoryEntry entryPC = new DirectoryEntry(path);
DirectoryEntry newEntry = entryPC.Children.Add("NewGroup","Group");
//newEntry.Properties["groupType"][0] = "4";
newEntry.Properties["Description"].Add("test");
newEntry.CommitChanges();
} 五、删除组:
private void button6_Click(object sender, System.EventArgs e)

{
string userGroup = "NewGroup";
string path1 = String.Format("WinNT://{0}",System.Environment.MachineName);
DirectoryEntry parent = new DirectoryEntry(path1);
object[] paras = new object[2];
paras[0] = "group";
paras[1] = userGroup;
parent.Invoke("Delete",paras);
} 六、查找组:
private void button8_Click(object sender, System.EventArgs e)

{
string userGroup = "NewGroup";
string path1 = String.Format("WinNT://{0}",System.Environment.MachineName);
DirectoryEntry parent = new DirectoryEntry(path1);
DirectoryEntry group = parent.Children.Find(userGroup,"group");
if(group != null)
MessageBox.Show("Group find.");
else
MessageBox.Show("Group not found.");
} 七、新增用户:
private void button4_Click(object sender, System.EventArgs e)

{
string path = String.Format("WinNT://{0}",System.Environment.MachineName);
DirectoryEntry entryPC = new DirectoryEntry(path);
DirectoryEntry obUser = entryPC.Children.Add("NewUser","User");
obUser.Properties["Description"].Add("Test User from .NET");
obUser.Properties["FullName"].Add("NewUser");
object obRet = obUser.Invoke("SetPassword", "123");
obUser.CommitChanges();
} 八、删除用户:
private void button5_Click(object sender, System.EventArgs e)

{
string userName = "NewUser";
string path1 = String.Format("WinNT://{0}",System.Environment.MachineName);
DirectoryEntry parent = new DirectoryEntry(path1);
object[] paras = new object[2];
paras[0] = "user";
paras[1] = userName;
parent.Invoke("Delete",paras);
} 九、查找用户:
private void button7_Click(object sender, System.EventArgs e)

{
string userName = "NewUser";
string path1 = String.Format("WinNT://{0}",System.Environment.MachineName);
DirectoryEntry parent = new DirectoryEntry(path1);
DirectoryEntry user = parent.Children.Find(userName,"user");
if(user != null)
MessageBox.Show("User find.");
else
MessageBox.Show("User not found.");
} 参考页:How to add a new user using DirectoryServices?