在.NET下利用目录服务操纵本机用户和用户组

一、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服务
运行效果:
在.NET下利用目录服务操纵本机用户和用户组

示例代码:
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?

你可能感兴趣的:(.net)