使用.net操作AD域的一些代码(转)

using System.DirectoryServices;

--先应用

 

--添加用户

DirectoryEntry entry = new DirectoryEntry(BaseFunctions.DomainSrv,HttpContext.Current.Session["username"].ToString(),HttpContext.Current.Session["password"].ToString(), AuthenticationTypes.Secure);
    DirectoryEntry   subEntry   =   entry.Children.Find(ou.Value);
    DirectoryEntry deUser = subEntry.Children.Add("cn=" +firstname.Text.ToString()+lastname.Text.ToString(), "user");
    deUser.Properties["userPrincipalName"].Add((accountname.Text.ToString()+"@"+BaseFunctions.Domainname));
    deUser.Properties["samAccountName"].Add(accountname.Text.ToString());//帐户
    deUser.Properties["description"].Value = desc.Text.ToString();
    deUser.Properties["sn"].Add(firstname.Text.ToString());
    deUser.Properties["givenName"].Add(lastname.Text.ToString());
    deUser.Properties["displayName"].Add(firstname.Text.ToString()+lastname.Text.ToString());
     deUser.CommitChanges();

    deUser.Invoke("ChangePassword",new object[]{"",password.Text.ToString()});
    deUser.Properties["userAccountControl"].Value = 0x200;
    deUser.CommitChanges();
    deUser.Close();
    lblShowInfo.Text="添加成功";

 

----修改密码

if(tb_newpass.Value.Trim()!=tb_newpass1.Value.Trim())
    {
     lblShowInfo.Text="两次输入的新密码不一样";
     return;
    }
    try
    {
     DirectoryEntry de=new DirectoryEntry(BaseFunctions.DomainSrv,BaseFunctions.GetUserNameFromSession(),BaseFunctions.GetPassWord());
    
     DirectorySearcher deSearch = new DirectorySearcher(de);
     deSearch.Filter = "(&(&(objectCategory=person)(objectClass=user))(sAMAccountName="+Request.QueryString["username"]+"))";
     deSearch.SearchScope = SearchScope.Subtree;
     SearchResult result = deSearch.FindOne();
     DirectoryEntry de1=result.GetDirectoryEntry();
     object retResult=de1.Invoke("SetPassword", new Object[]{tb_newpass.Value.Trim()});
     lblShowInfo.Text="成功修改密码!";
     de1.Close();
     de.Close();
     de1.Dispose();
     de.Dispose();
    }
    catch(Exception ex)
    {
     if(ex.InnerException!=null)
      lblShowInfo.Text=ex.InnerException.Message;
     else
      lblShowInfo.Text+=ex.Message;
    }

 

---将用户改变组织单位

 

DirectoryEntry de=new DirectoryEntry(BaseFunctions.DomainSrv,HttpContext.Current.Session["username"].ToString(),HttpContext.Current.Session["password"].ToString());
    object o = de.NativeObject;
    DirectorySearcher ds = new DirectorySearcher(de);
    ds.Filter = "(SAMAccountName=" + Server.UrlDecode(Request.QueryString["username"]) + ")";
    ds.PropertiesToLoad.Add("cn");
    SearchResult sr = ds.FindOne();//查找该用户
   
    //Response.Write(sr.GetDirectoryEntry().Properties["name"][0]);

    DirectoryEntry de2=sr.GetDirectoryEntry();//设置de2为用户
    DirectoryEntry   ou2   =   de.Children.Find(Request.QueryString["ou"]);//获取新ou对象
   
    de2.MoveTo(ou2);//移动OU
    de2.CommitChanges();//提交
    Response.Write("<script language=javascript>");
    Response.Write("alert('移动完毕');");
    Response.Write("opener.window.location.reload(true);");
    Response.Write("window.close();");
    Response.Write("</script>");

 

--用递归方式显示组织单位.还有小部分没做好,只是显示出来,没优化,有兴趣的同志可以改界面呈现方式

调用函数

GetOu("泉州移动",5);----5代表是显示5级

 

public void GetOu(string ouname,int amstr)
   {
    DirectoryEntry entry=new DirectoryEntry(BaseFunctions.DomainSrv,BaseFunctions.GetUserNameFromSession(),BaseFunctions.GetPassWord());
    System.DirectoryServices.DirectoryEntry subentry=entry.Children.Find(ouname,"organizationalUnit");

    string ax;
    ax="";
    string am;
    am="";
    foreach(DirectoryEntry res in subentry.Children)
    {
     
     am="";
     foreach(DirectoryEntry res1 in res.Children)
     {
      if(res1.Name.Substring(0,3)=="OU=")
      {
       am=am+"1";
      }

     }

     if(res.Name.Substring(0,3)=="OU=")//判断是组织单位还是其他类型,例如cn=用户,GROUP=组等
     {


      ax=ax+"1";

      string []strArray;//用于存储上级目录的字符串
      string ou;
      ou="";
      strArray=ouname.Split(',');//分割

      for(int j=strArray.Length;j>0;j--)
      {
       if(j==1)
       {
        if(amstr==ax.Length)
         {
          HttpContext.Current.Response.Write("<img src=images/tree2.gif>");
         }
         else
         {
         HttpContext.Current.Response.Write("<img src=images/tree1.gif>");
        }
       }
       else
       {
        HttpContext.Current.Response.Write("<img src=images/tree3.gif>");
       }

      }//根据上级目录的深度来显示目录树的层次
     
      if(am=="")
      {
       Response.Write("<img src=images/tree6.gif>");
      }
      else
      {
       Response.Write("<img src=images/tree5.gif>");
      }
   
      string []strArray2;
      string tem;
      tem=res.Name.ToString()+","+ouname;//存储本级目录
      strArray2=tem.Split(',');
      for(int k=strArray2.Length;k>0;k--)
      {

       ou=ou+strArray2[k-1].Replace("OU=","/");
      }
      //OU存储本级目录的新格式,例如.泉州移动--网络部--IT中心等

 

      if(HttpContext.Current.Request.QueryString["action"]=="move")
      {
       HttpContext.Current.Response.Write("<a οnclick=movechk('"+Server.UrlEncode(res.Name.ToString()+","+ouname)+"','"+HttpContext.Current.Request.QueryString["username"]+"');>"+res.Name.ToString().Replace("OU=","")+"</a><br>");
      }
      else if(HttpContext.Current.Request.QueryString["action"]=="add")
      {
       HttpContext.Current.Response.Write("<a οnclick=chk('"+ou+"','"+res.Name.ToString()+","+ouname+"');>"+res.Name.ToString().Replace("OU=","")+"</a><br>");
     
      }
      else
      {
       HttpContext.Current.Response.Write("<a οnclick=magchk('"+Server.UrlEncode(res.Name.ToString()+","+ouname)+"');>"+res.Name.ToString().Replace("OU=","")+"</a><br>");
     
      }

      GetOu(res.Name.ToString()+","+ouname,am.Length);
     }
     else
     {
     
     }
    }

 

----显示所有域用户的信息

 

DirectoryEntry de = new DirectoryEntry(BaseFunctions.DomainSrv,HttpContext.Current.Session["username"].ToString(),HttpContext.Current.Session["password"].ToString());
    DirectorySearcher srch=new DirectorySearcher();
    srch.Filter =("(objectclass=User)");

    srch.SearchRoot=de;
    srch.SearchScope = SearchScope.Subtree;
    srch.PropertiesToLoad.Add("sn");
    srch.PropertiesToLoad.Add("givenName");
    srch.PropertiesToLoad.Add("uid");
    srch.PropertiesToLoad.Add("telephoneNumber");
    srch.PropertiesToLoad.Add("employeeNumber");

    Response.Write("<table width=100% border=0 align=center Class=border");
    Response.Write("<tr background=images/topbar_bg.gif>");
    Response.Write("<td align=center height=22>帐号</td>");
    Response.Write("<td align=center height=22>名字</td>");
    Response.Write("<td align=center height=22>姓</td>");
    Response.Write("<td align=center height=22>名</td>");
    Response.Write("<td align=center height=22>显示名称</td>");
    Response.Write("<td align=center height=22>手机</td>");
    Response.Write("<td align=center height=22>部门</td>");
    Response.Write("<td align=center height=22>状态</td>");
  
    Response.Write("</tr>");

    foreach(SearchResult res in srch.FindAll())
    {
     if(res.Path.IndexOf("泉州移动")>0)
     {

      Response.Write("<tr class=tdbg>");
      Response.Write("<td align=center>"+res.GetDirectoryEntry().Properties["sAMAccountName"][0]+"</td>");
      Response.Write("<td align=center>"+res.GetDirectoryEntry().Properties["Name"][0]+"</td>");
      Response.Write("<td align=center>"+res.GetDirectoryEntry().Properties["Sn"][0]+"</td>");

      try
      {
       Response.Write("<td align=center>"+res.GetDirectoryEntry().Properties["givenName"][0]+"</td>");
      }
      catch
      {
    
       Response.Write("<td align=center></td>");
    
      }
     
      Response.Write("<td align=center>"+res.GetDirectoryEntry().Properties["displayName"][0]+"</td>");
      try
      {
       Response.Write("<td align=center>"+res.GetDirectoryEntry().Properties["telephoneNumber"][0]+"</td>");
      }
      catch
      {
    
       Response.Write("<td align=center></td>");
    
      }
      try
      {
       Response.Write("<td align=center>"+res.GetDirectoryEntry().Properties["mail"][0]+"</td>");
      }
      catch
      {
    
       Response.Write("<td align=center></td>");
    
      }
      string []strArray;
      string str;
      str="";
      strArray=res.Path.Split(',');
      for(int j=strArray.Length;j>0;j--)

      {
       if(strArray[j-1].Substring(0,3)=="OU=")
       {
        str=str+"-"+strArray[j-1].Replace("OU=","");
       }

      }
      Response.Write("<td align=center>"+str+"</td>");

      if(res.GetDirectoryEntry().Properties["userAccountControl"][0].ToString()=="514")
      {
       Response.Write("<td align=center>锁定</td>");
      }
      else
      {
       Response.Write("<td align=center>正常</td>");
    
      }
      /*
      Response.Write("<td align=center>");
      if(res.GetDirectoryEntry().Properties["userAccountControl"][0].ToString()=="514")
      {
       Response.Write("<input type=button value=解锁 οnclick=\"javascript:window.open('setstate.aspx?action=1&username="+res.GetDirectoryEntry().Properties["sAMAccountName"][0]+"', 'poppage', 'toolbars=1, scrollbars=0, location=0, statusbars=1, menubars=0, resizable=1, width=50, height=50');\">");
      }
      else
      {
       Response.Write("<input type=button value=锁定 οnclick=\"javascript:window.open('setstate.aspx?action=2&username="+res.GetDirectoryEntry().Properties["sAMAccountName"][0]+"', 'poppage', 'toolbars=1, scrollbars=0, location=0, statusbars=1, menubars=0, resizable=1, width=50, height=50');\">");
      }
      Response.Write("<input type=button value=移动部门 οnclick=\"javascript:window.open('ou.aspx?action=move&username="+res.GetDirectoryEntry().Properties["sAMAccountName"][0]+"', 'poppage', 'toolbars=1, scrollbars=1, location=0, statusbars=1, menubars=0, resizable=1, width=200, height=650');\">");
      Response.Write("<input type=button value=更改密码 οnclick=\"javascript:window.open('changeuserpass.aspx?action=password&username="+res.GetDirectoryEntry().Properties["sAMAccountName"][0]+"', 'poppage', 'toolbars=1, scrollbars=1, location=0, statusbars=1, menubars=0, resizable=1, width=500, height=150');\">");
   
      Response.Write("</td>");
      */
      Response.Write("</tr>");
      //CreateExcelFile2(res.GetDirectoryEntry().Password.ToString(),res.GetDirectoryEntry().Properties["Name"][0].ToString(),res.GetDirectoryEntry().Properties["telephoneNumber"][0].ToString(),res.GetDirectoryEntry().Properties["sn"][0].ToString(),res.GetDirectoryEntry().Properties["givenName"][0].ToString(),res.GetDirectoryEntry().Properties["displayName"][0].ToString());
     }
    }
    Response.Write("</table>");

转载于:https://www.cnblogs.com/heliguan/articles/993607.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值