企业信息化系统基础——AD:使用C#批量创建帐号

如果一个公司打算使用微软的产品来构建自己的办公自动化系统,那么,建议采用主域控制的方式。那么,必然就要用到活动目录(AD),这样,IT部门就需要为公司的每一个员工来创建域帐号。如果公司比较大的话,这是一个很大的工程。而且,我们会发现,有些工作量基本上是在重复劳动,人力资源部为了给It部门提供人员名单,会录入一次人员的各种信息,比如姓名、工号、所属部门、部门领导、电话号码等等,那么,IT人员在拿到这张表后,他又要重新录入一次。并且常常会因为人为的原因导致帐户中出现错误。下面,我们就用C#编写了一个创建帐户的程序。在这个程序中,它不但要创建域帐户,它还会在相应的Exchange中创建相应的邮件帐户。通过这个程序,人力资源部门只需要按照IT部门提供的数据库格式(Access)填写相关项目就可以了。首先,我们需要定义一些变量:string strMemberof="";
   string strUserParm="";
   string strManager="";
   string strScriptPath="";
   string strdepartment="";
   string strCompany="";
  // string strAccountExp;
   string defaultNC = "DC=Test,DC=net";  //这是默认的域
   string alias = ""; 
   string fullName = "";
   string password = @"PassWord";  //这是默认的初始密码
   string domainName = "test.net";
   string strGivenName=""; //下面这个变量告诉程序将邮箱建在Exchange的哪个存储区域中string homeMDB = "CN=Test,CN=控股公司," 
    + "CN=InformationStore,CN=MAIL,CN=Servers,"
    + "CN=First Administrative Group,CN=Administrative Groups,"
    + "CN=test,CN=Microsoft Exchange,CN=Services,"
    + "CN=Configuration,DC=Test,DC=net"; label1.Text="开始从模板中加载数据!";
           //获取模板信息 我们知道,创建的一批帐户中,有许多的项目是相同的,所以,我们先创建好一个帐户作为模板,然后,通过读取这个模板的数据作为新建的帐户的相应项目的数据。这段代码采用了Ad的查询对象:
   DirectoryEntry deMb = new DirectoryEntry();
   deMb.Path="LDAP://CN=模板, OU=项目组,OU=部门,DC=Test, DC=net";
     strMemberof=deMb.Properties["memberof"][0].ToString();
   strUserParm=deMb.Properties["UserParameters"][0].ToString();
   strManager=deMb.Properties["manager"][0].ToString();
   strScriptPath=deMb.Properties["scriptPath"][0].ToString();
   strdepartment=deMb.Properties["department"][0].ToString();
   strCompany=deMb.Properties["company"][0].ToString();
  // strAccountExp=deMb.Properties["accountExpires"].Value.ToString();
   deMb.Close();
   label1.Text="加载数据完毕!开始从数据库中读取新建帐户信息!";
   //读取数据库获取帐户信息
   ADODB.Connection objConn;
   ADODB.Command objCmd;
   ADODB.Recordset objRs;
   object objOptParm;
   objOptParm="";
   string str=@"Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Data Source=""db1.mdb"";Mode=Share Deny None;Jet OLEDB:Engine Type=5;Provider=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System database=;Jet OLEDB:SFP=False;persist security info=False;Extended Properties=;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;User ID=Admin;Jet OLEDB:Global Bulk Transactions=1";
   objConn=new ADODB.Connection();
   try
   {    objConn.Open(str,"","",-1);
       }
   catch(SystemException ex)
   {
    MessageBox.Show(ex.Message);
    
   }
   finally
   {
    //
   }
   objRs=new ADODB.Recordset();
   objCmd=new ADODB.Command();
   objCmd.CommandText="select * from sheet1";
   objCmd.ActiveConnection=objConn;
   try
   {
    objRs=objCmd.Execute(out objOptParm,ref objOptParm,1);   }
   catch(SystemException ex)
   {
    objConn.Close();
    MessageBox.Show(ex.Message);
    
    
   }
   finally
   {
    //
   }
   try
   {
    
   //开始创建帐户 
    //MessageBox.Show(objRs.Fields[2].Value.ToString());
    DirectoryEntry container, user;
    CDOEXM.IMailboxStore mailbox;
    container = new DirectoryEntry("LDAP://OU=项目组,OU=部门," + defaultNC);
    //读取数据    while (!objRs.EOF)
    {
     //读取数据
     fullName=objRs.Fields[1].Value.ToString();
     alias=objRs.Fields[4].Value.ToString();
     strGivenName=objRs.Fields[2].Value.ToString();     label1.Text="创建帐户:"+fullName+"-"+alias+"-"+strGivenName+"检查有无重复帐号!";
     //检查是否有重复的帐号
     DirectoryEntry su=new DirectoryEntry("LDAP://DC=Test,DC=net");     DirectorySearcher searcher = new DirectorySearcher();
     searcher.SearchRoot=su;
     searcher.Filter = "(&(object= SearchScope.Subtree;
     searcher.Sort = new SortOption("givenName", SortDirection.Ascending);
     SearchResultCollection results = searcher.FindAll();
     if(results.Count>0)
     {
      //表明有重复的帐号,修改fullname和alias
      fullName=fullName+strGivenName;
      alias=alias+strGivenName;
      
     }
    // else
    // {
      //创建帐户
        label1.Text="创建帐户:"+fullName+"-"+alias+"-"+strGivenName;
      try
      {
      
       user = container.Children.Add("cn=" + fullName, "user");
       user.Properties["sAMAccountName"].Add(alias);//帐户
       user.Properties["userPrincipalName"].Add((alias+"@Test.net"));
       user.Properties["givenName"].Add(strGivenName);//工号
       user.Properties["sn"].Add(fullName);//姓
      // user.Properties["telephoneNumber"].Add("0000");//电话
      // user.Properties["mobile"].Add("00000000000");//手机
       user.Properties["company"].Add(strCompany);//公司
       user.Properties["department"].Add(strdepartment);//部门
     //  user.Properties["physicalDeliveryOfficeName"].Add("0000"); //这里要说明一下:这里是要设置帐户的到期时间,因为,根据我们的规定,如果在帐户到期之前,没有通过考试的话,那么帐户就会禁用。可是,AD中这个字段是整形的,我不知道怎么去换算它,所以就有以下这段代码,希望,有高手可以指点一下。
       DateTime dt=new DateTime(2004,10,31,0,0,0,0);
       long longAE=dt.Ticks;
       longAE=longAE-504910656000000000;//减去8个时区
       user.Properties["accountExpires"].Add(longAE.ToString());//帐号到期时间 
       user.Properties["msNPAllowDialin"].Value=false;//禁止拨入
       user.Properties["userParameters"].Add(strUserParm);//禁止终端服务
       user.Properties["scriptPath"].Add(strScriptPath);//配置文件
       user.Properties["manager"].Add(strManager);//领导
       user.Properties["userPassword"].Add(password);
    
       // user.Invoke("SetPassword", new object[]{password});       user.CommitChanges();
       user.Invoke("SetPassword", new object[]{password});
       user.CommitChanges();
       //This enables the new user.
       user.Properties["userAccountControl"].Value = 0x200; //ADS_UF_NORMAL_ACCOUNT
       user.CommitChanges();
    
       //Obtain the IMailboxStore interface, create the mailbox, and commit the changes.
       mailbox = (IMailboxStore)user.NativeObject;
       mailbox.CreateMailbox(homeMDB);
       user.CommitChanges();
      
  
      }
      catch(Exception ex) 
      {
       MessageBox.Show(ex.Message.ToString());
      }
      // }
           label1.Text="创建帐户:"+fullName+"-"+alias+"-"+strGivenName+"创建完毕!";
     objRs.MoveNext();
     
    }
       }
   catch(SystemException ex)
   { 
    objConn.Close();
    MessageBox.Show(ex.Message);   }
   finally
   {
    objRs.Close();
    objConn.Close();
    MessageBox.Show("ok");
   }   
  }

类别: Active Directory

转载于:https://www.cnblogs.com/ningang/p/4321690.html

企业信息化系统基础——AD:使用C#批量创建帐号相关推荐

  1. AD:使用C#批量创建帐号

    如果一个公司打算使用微软的产品来构建自己的办公自动化系统,那么,建议采用主域控制的方式.那么,必然就要用到活动目录(AD),这样,IT部门就需要 为公司的每一个员工来创建域帐号.如果公司比较大的话,这 ...

  2. 企业信息化系统,提高品牌市场竞争力——水孩儿2008企业信息化经验交流大会材料...

    大会材料 一.企业基本情况   北京嘉曼服饰有限公司成立于1992年,公司致力于"水孩儿"童装品牌的设计开发,生产制造和品牌营销.经过十余年发展,"水孩儿"已成 ...

  3. 企业信息管理平台_OAJava企业信息化系统

    O2OA : Java企业信息化系统 O2OA是一款Java开源企业信息化建设平台,包括流程管理.门户管理.信息管理.数据管理和服务管理五大平台. 用户可以直接使用平台已有功能进行信息信息化建设,平台 ...

  4. 企业信息化系统如何开发?如何沉淀企业数据?

    ​身处信息化时代,大数据的广泛应用让信息获取变得透明化.便捷化.用户的每个行为都可能产生数据并且被记录,如消费行为.消费频率.消费习惯等.大数据对于企业日常经营决策具有重要作用,可以帮助企业缩短生产周 ...

  5. 班尼路信息化系统基础选型的简单分析

    今天在和女友逛街的时候,偶然可以近距离观察班尼路的销售系统.还特意动了一下,发现是 Linux 系统下的程序.与服务器是远程访问的,类似于智能客户端的模式. 回来后,又查询了一下网上介绍班尼路信息化系 ...

  6. 企业信息化系统建设方案

    互联网IT公司信息化系统建设需要考虑的系统包括但不限于以下几个方面: 1. 人力资源管理系统 2. 客户关系管理系统 3. 项目管理系统 4. 资产管理系统 5. 商务管理系统 6. 决策支持系统 7 ...

  7. redhat下linux系统执行for循环语句批量创建用户并设置密码(初学)

    批量创建用户操作 1 创建文本保存批量用户的用户名,一行写一个用户名 [root@linuxprobe ~]# vim users.txt    a b c d e g 2 写shell脚本 #!/b ...

  8. 企业信息化系统ERP篇

    ERP系统是企业资源计划(ENTERPRISE RESOURCE PLANNING)的简称.ERP系统集信息技术与先进管理思想于一身,是以系统化的管理思想,为企业员工及决策层提供决策手段的管理平台. ...

  9. 电力企业信息化系统之调度信息报送系统整体解决方案

    一.建设目的 调度机构信息报送与披露工作是电力监管机构对电网公司业务监管的重要方式,是发电企业及时了解电网及其它发电企业运行情况的重要途径,有助于加强厂网协调,保证电网安全稳定运行. 为规范调度机构信 ...

最新文章

  1. MYSQL注入天书之服务器(两层)架构
  2. 让delphi程序不受WINDOWS日期格式的影响
  3. python battleship_codecademy_python_Battleship!
  4. CAD安装失败怎样卸载重新安装CAD,解决CAD安装失败的方法总结
  5. Django从理论到实战(part29)--Field的常用参数
  6. 全国计算机三级数据库技术选择题,全国计算机三级《数据库技术》选择题训练2016...
  7. 夜间工作致癌的原因被发现:熬夜破坏了癌症相关基因的节律,导致DNA损伤增加、修复效率降低...
  8. linux关闭mysql strict mode的方法介绍
  9. 消息称iPhone 14、14 Max仍采用A15处理器
  10. mysql scale,Mailchimp Scale:a MySQL Perspective
  11. LNMP架构的搭建--源码编译(MYSQL,PHP,nginx)
  12. Excel打印时,如何带上当前时间~
  13. 用Jprofile监控远程linux机器上的tomcat
  14. 安装tomcat时出错:failed to install tomcat6 service问题的解决方法
  15. cvc 降噪_此降噪非彼降噪,你要的是哪种降噪?
  16. web开发实例教程,CSS盒子模型居中方法
  17. MySQL的Workbench中pk nn uq等的含义
  18. 牛客网练习—《网络基础》DAY3
  19. Handler消息机制介绍,流程梳理
  20. 小白的测试人生(三)小白如何进入IT行业及如何选择培训机构

热门文章

  1. CheckBox操作
  2. 给B公司的一些建议(又一篇烂尾的文章)
  3. 山东涛雒镇万亩水稻 国稻种芯·中国水稻节:日照迎来收割季
  4. 如何安装Java软件开发工具包(JDK)
  5. 【JavaScript】获取网页元素
  6. c语言随机生成n个数求最小值,C语言程序:从N个数中随机取出100个不同的数
  7. 判断当前终端是移动端还是PC端
  8. 壳牌shell气化炉结构_壳牌Shell气化炉正常操作.pdf
  9. 为什么要做特征归一化/标准化?
  10. emis相关的一些备忘