首页 > 开发 > 综合 > 正文

使用C#批量修改域帐户信息

2024-07-21 02:19:02
字体:
来源:转载
供稿:网友
公司的组织结构经常发生变化,而我们的域帐户信息(ad)是和真实的组织机构相对应的。组织机构变化了,我们自然要改动相应的域帐户信息啦。这是一件很痛苦的事情,原因是什么,大家都明白。那么能不能用程序来解决这个问题呢?(windows2003的管理工具好像已经支持批量修改域帐户信息了)。
我创建了一个windows应用程序来解决:

在form上放置了六个combobox用于选择公司的ou(可以选择五级ou,如果你喜欢可以用treeview更好些)。

加载form的时候初始化这些combobox:

private void form1_load(object sender, system.eventargs e)

{

//初始化公司选择框

directoryentry de1=new directoryentry();

de1.path="ldap://dc=test,dc=net";

try

{

//所有ou(第一级)

foreach (directoryentry ch1 in de1.children)

{

str=ch1.name.tostring();

string str1="";

//str1=str.substring(0,str.indexof("="));

str1=ch1.schemaclassname.tostring();

if (str1=="organizationalunit")

{

//listbox1.items.add(ch1.name.tostring());

//加入第一个combobox

combobox1.items.add(ch1.name.tostring());

//

combobox3.items.add(ch1.name.tostring());

}

}



de1.close();

//textbox1.text=textbox1.text+"--------------next------------------------/r/n";

//

messagebox.show("finish!!!");

}

catch(exception ex)

{



strerr=ex.message;



}

finally

{}





}



在初始化form的时候在第一个combobox中显示出所有的第一层ou。然后,在选择了这个combobox的时候,在第二个combobox中显示下一级ou:

private void combobox1_selectedindexchanged(object sender, system.eventargs e)

{

//str=listbox1.selecteditem.tostring();

str=combobox1.selecteditem.tostring();

directoryentry de1=new directoryentry();

de1.path="ldap://"+str+",dc=test,dc=net";

try

{

combobox2.items.clear();

combobox2.text="";

combobox2.refresh();

foreach (directoryentry ch1 in de1.children)

{

//

textbox1.text=textbox1.text+str+"/r/n";//ch.properties["adpath"][0].tostring();

string str1="";

str1=ch1.schemaclassname.tostring();

if (str1=="organizationalunit")

{

combobox2.items.add(ch1.name.tostring());

}

}



de1.close();



//textbox1.text=textbox1.text+"--------------next------------------------/r/n";

//

messagebox.show("finish!!!");

}

catch(exception ex)

{



messagebox.show(ex.message);

}

finally

{}



}



依次在下一个combobox中显示下一级ou。选择好要修改的ou下后,就可以修改该ou下所有的信息了。这里以修改部门名称为例。

使用一个textbox输入部门名称,放一个按钮触发修改动作:

private void button1_click(object sender, system.eventargs e)

{

string stradroot="";

string strname="";

//str中保存的是ou的adpath的一部分,即通过选择combobox产生的字符串,类似于ou=imd,ou=company



stradroot="ldap://"+str+",dc=test,dc=net";

directoryentry de=new directoryentry();

de.path=stradroot;

//修改所有的user对象

foreach(directoryentry chm in de.children)

{

string strtype="";

strtype=chm.schemaclassname.tostring();

if(strtype.toupper()=="user")

{

strname=chm.name.tostring();

//判断是否属性值是否为空

if(chm.properties.contains("department"))

{

chm.properties["department"][0]=textbox2.text.tostring();

chm.commitchanges();

textbox3.text=textbox3.text+chm.name .tostring()+"的部门名称修改成功!/r/n";

}

else

{

chm.properties["department"].add(textbox2.text.tostring());

chm.commitchanges();

//textbox3.text=textbox3.text+ch1.name .tostring()+"/r/n";

textbox3.text=textbox3.text+chm.name .tostring()+"的部门名称添加成功!/r/n";

}

}







}





发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表