分享
 
 
 

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

王朝c#·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

如果一个公司打算使用微软的产品来构建自己的办公自动化系统,那么,建议采用主域控制的方式。那么,必然就要用到活动目录(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 = "(&(objectClass=user)(sAMAccountName="+alias+"))";

searcher.SearchScope = 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");

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有