使用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";
}
}
}