C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户

时间:2022-02-19 09:06:52
  在对AD进行操作,我们首先要引如System.DirectoryServices这个命名空间,里面的DirectoryEntry类是我们主要用到的。他封装了 Active Directory 层次结构中的节点或对象,我们先要建立一个DirectoryEntry对象。
1C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户public DirectoryEntry GetDirectoryObject(string path,string username,string password)
2C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户  {
3C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户   DirectoryEntry de=new DirectoryEntry("LDAP://"+path, username, password, AuthenticationTypes.Secure);
4C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户   return de;
5C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户  }

  其中path是 DirectoryEntry的路径,username是在对客户端进行身份验证时使用的用户名,password是在对客户端进行身份验证时使用的密码,AuthenticationTypes是我们请求安全身份认证的方式。path说明一下,就是你所在的域的域名,如cnblogs.com。这样我们可以通过域名得到一个DirectoryEntry 对象。
  接下来我们需要做的工作是建立组织单位,用到Children属性,使用此属性在层次结构中查找、检索或创建目录项。此属性是一个集合,它与通常的迭代功能一起,提供 Add 方法,通过该方法将节点直接添加到当前绑定到的父节点之下的集合。当向集合中添加节点时,必须指定新节点的名称以及要与该节点相关联的架构模板的名称。例如,您可能需要使用标题为“Computer”的架构在层次结构中添加新的计算机。Add.这个方法很简单,只需要注意一下参数,name是我们建立的组织单位的名称前面的OU=是必须的,后一个参数 Add 方法,通过该方法将节点直接添加到当前绑定到的父节点之下的集合。当向集合中添加节点时,必须指定新节点的名称以及要与该节点相关联的架构模板的名称。例如,您可能需要使用标题为“Computer”的架构在层次结构中添加新的计算机。Add.这个方法很简单,只需要注意一下参数,name是我们建立的组织单位的名称前面的OU=是必须的,后一个参数Add 方法,通过该方法将节点直接添加到当前绑定到的父节点之下的集合。当向集合中添加节点时,必须指定新节点的名称以及要与该节点相关联的架构模板的名称。例如,您可能需要使用标题为“Computer”的架构在层次结构中添加新的计算机。Add.这个方法很简单,只需要注意一下参数,name是我们建立的组织单位的名称前面的OU=是必须的,后一个参数organizationalUnit也是固定了,代表了要增加的DirectoryEntry的架构名称,organizationalUnit表示是增加的是组织单位。最后需要用CommitChanges方法提交一下。代码如下:

1C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户public DirectoryEntry GreateOU(string ouname)
2C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户        {
3C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户            DirectoryEntry entry = GetDirectoryObject(path,username,password);
4C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户            DirectoryEntry OU = entry.Children.Add("OU="+ouname, "organizationalUnit");
5C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户            OU.CommitChanges();
6C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户            return OU;
7C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户
8C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户        }

  通过上面的方法我们已经建立了组织单位,下面是向组织单位里添加用户了,方法其实和添加组织单位一样,只是参数表示的类型不同而已。我们可以直接将用户这个DirectoryEntry加在刚才的组织单位对象下username表示名称, sAMAccountName设置的是用户的登陆名称。
1C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户DirectoryEntry ude=ou.Children.Add("CN="+username,"user");
2C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户            ude.Properties["sAMAccountName"].Value=name;
3C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户            ude.CommitChanges();
4C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户            ude.Close();

  通过上面的方法我们建立了组织单位和组织单位下的用户,但是这样还没有完。当我建好用户后发现用户并没有启用,所以我们还要想办法让建好的用户处于启用状态。查了相关资料和userAccountControl这个属性有关系。我在程序里设置断点跟踪了一下得到起用的值,重新获得用户DirectoryEntry对象后对其进行更改,用户被启用。我想因该还有其他方法,这是目前我能想到的。如果有更好的方法欢迎留言给我。代码如下。
1C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户public void SetEnable(string user)
2C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户        {
3C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户            DirectoryEntry ude=GetDirectoryEntry(user);
4C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户            ude.Properties["userAccountControl"].Value=544;
5C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户            ude.CommitChanges();
6C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户            ude.Close();
7C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户
8C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户        }

  如果需要禁用该用户只需要将这个值设置为546就行了。
最后需要做的是对改用户设置密码,这一步必要好做,同样找到改用户DirectoryEntry对象对其进行设置

1C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户public void ChangePassword(string name,string password)
2C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户        {
3C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户            DirectoryEntry ude=GetDirectoryEntry(name);
4C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户            ude.Invoke("SetPassword",new object[]{password});
5C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户            ude.CommitChanges();
6C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户            ude.Close();
7C#在活动目录(ACTIVE DIRECTORY)中创建组织单位和用户        }
  通过上面方法基本建立了组织单位和用户,但是我发现其中设置密码必须将程序放在主域服务器上才能生效,不然就说找不到对象