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

企业信息化系统基础——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 [email protected]"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

时间: 2024-10-21 11:31:56

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

金众诚企业信息化系统厂家有哪些      

金众诚企业信息化系统厂家有哪些 与风风火火.即将引爆的中小企业信息化市场相比,我国大型企业信息化市场似乎有些不温不火.大企业现代化水平显然比中小企业高,但为何社会各界对其信息化应用的关注度看上去反不如中小企业那么高大企业有哪些有共性的信息化需求?带着这些问题,我们在上海浦江两岸,对十多家大型企业集团信息化应用进行了实地调查. 调查中我们发现,其实,大企业信息化远比中小企业起步早.基础好.层次高,一些大企业内部信息化早已进入深度应用阶段.但是长期以来,由于传统大企业以"大"为主要特点,呈

金众诚企业信息化系统包括哪些基本功能

随着信息化浪潮席卷全球,企业管理信息化系统开始在企业的核心业务运作上扮演至关重要的角色,企业的发展分工越来越趋于精细化,企业的核心业务的良好运作是企业在市场上保持竞争力的根本.为了成功实施管理信息化核心系统,企业需要选择既懂流程技术又懂业务问题的合作伙伴. 企业的管理系统的作用是利用人的主导作用,辅助以现代的计算机软.硬件设备.通信网络以及办公设备等物质支持,进行的企业运营信息的收集.储存.加工.传输以及维护,进而达到提高企业日常营运效率提高,战略决策水平的增强效果.根据上述企业管理系统的作用分

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

一.建设目的 调度机构信息报送与披露工作是电力监管机构对电网公司业务监管的重要方式,是发电企业及时了解电网及其它发电企业运行情况的重要途径,有助于加强厂网协调,保证电网安全稳定运行. 为规范调度机构信息报送与披露行为,明确公司各部门的职责与分工,强化信息收集.审核.上报流程,提高信息报送的准确性和及时性,根据国家电监会<电力调度机构信息报送与披露办法>以及国家电网公司相关工作要求,进行电力调度信息的报送工作. 目前,很多电力公司采用Excel文件的方式采集和管理电力调度信息数据. 由于Exce

电力企业信息化系统主要报表展示

报送内容 年报 装机规模及参数 装机规模指的是一个发电厂或者区域电网的发电能力.本表是由电力公司的调通中心负责填写,因此表中所体现的装机规模,即本公司向其它的发电厂或者电网调度的电量总量数据,以及电量的类型,接入电压等级等具体参数.通过对这些数据进行不同维度进行排列组合,使用户能够一目了然的掌握本公司整个年度的电量调度情况,从中发现是否存在诸如由于本单位的相关电厂产能不足,而必须从外网调入大量的电力,或者电量的调度多发生于省调以及省调以下的单位,说明本年度网内总的电力缺口不大等问题. 输电规模及

能源企业信息化系统中的典型客户管理数据分析模块展示

客户管理数据分析模块 不同企业之间的业务差别比较大,系统功能侧重点有所不同,但都包含基本的功能模块,一般的客户管理系统功能模块可划分为营销管理.销售管理.服务管理.客户分析.供应商管理模块. 营销管理子系统对客户和市场信息进行全面的分析,对市场进行细分,产生高质量的市场策划活动,指导销售队伍更有效地工作.通过营销管理子系统可以使市场营销专业人员能够直接对市场营销活动的有效性加以计划.执行.监视和分析,能够帮助企业选择和细分客户.追踪客户联系.衡量联系结果.提供对客户直接的自动回应功能,进而实现营

批量创建AD帐号如何去除空格

在前面文章中介绍过一篇文章,主要讲的是"关于Exchange Server 2010 启用邮箱时MMC控制台崩溃问题处理"方法,其中排错思路中也提到过是由于批量创建帐号过程中部分字段带空格导致的,其实这个是不能够完全避免的,由于毕竟是人工操作出现错误再所难免,完全解决导入数据不带空格其实是有办法的. 方法一:通过Excel的替换将空格去掉. 方法二:利用Excel中的SUBSTITUTE函数法去掉. 方法三:利用Excel中的CLEAN函数去掉. 当然上述都是需要运维人员对Excel中

马哥教育面授-八月一号课后小作业(linux创建用户、批量创建用户)

1.创建testuser uid 1234,主组:bin,辅助组:root,ftp,shell:/bin/csh home:/testdir/testuser [[email protected] ~]# useradd testuser -u 1234 -g bin -G root,ftp -s /bin/csh -d /testdir/testuser [[email protected] ~]# grep testuser /etc/passwd testuser:x:1234:1::/t

linux批量新建用户帐号脚本

在啃鸟哥的linux私房菜这本书,看到后面发现前面学的渐渐忘记了. 为了熟悉一些命令, 练习一下shell脚本 在14章看到的批量新建帐号范例,就学着,写一下练练手.  下面的代码有注释 照着鸟哥写的,稍加改动 符合学校的编制. 一.批量创建帐号并将信息保存至文件 没有像书上提供可选择密码生成方式,密码是和帐号一样,并设置了登录以后强制用户更改密码,觉得这种方案更安全 1 #!/bin/bash 2 # 3 #this program use to add account for your li

Github开源项目(企业信息化基础平台)

JEEPlatform 一款企业信息化开发基础平台,可以用于快速构建企业后台管理系统,集成了OA(办公自动化).SCM(供应链系统).ERP(企业资源管理系统).CMS(内容管理系统).CRM(客户关系管理系统)等企业系统的通用业务功能.Github链接:https://github.com/u014427391/jeeplatform 欢迎下载或者star(收藏) JeePlatform项目是一款以Activiti为工作流引擎,以Spring Framework为核心框架,集ORM框架Myba