天天看点

Windows AD中批量修改用户属性

Windows AD是之前其他人创建的,但是初始创建的一些用户很多信息没有健全,所以之后有些需要的时候就需要补全信息,而一旦用户量上来之后,往往这个事情是令人痛苦的,但这还是必须要做的,毕竟其他的系统以此为基础。好吧,由于三方系统的要求,现在需要往Windows AD中添加EmployeeID字段,将大概1200的EmployeeID添加到AD用户信息中去,做完之后,记下操作流程,以免类似的杯具重演。

默认建好活动目录后,AD用户是没有employeeID字段的,该字段是在部署Exchange时做了扩展schema之后产生的,所以如果你没有EmployeeID字段,而又需要使用员工ID的话,只需要下载Exchange安装镜像,并使用其中的脚本扩展schema即可。好吧,就不多说废话了,开始干活了。

一、导出用户数据

要批量修改用户的信息,首先要取得需要修改信息的用户,然后才能对用户的某些字段进行修改。要取得AD中的用户,这里使用csvde命令(当然你也可以使用Get-ADUser命令,只是命令的用法有所不同罢了,只要能取得用户信息即可)

csvde -d ou=*,dc=*,dc=* -r "(objectclass=user)" -l DN,cn -f c:\test.csv

这条命令取指定OU下面的用户的DN和cn信息,也就是用户在AD中的起始信息和用户名,然后将结果导出到C盘下的test.txt文件中。

以管理员身份打开命令提示符,然后在命令提示符窗口中输入该命令,回车,即可将所需的用户信息导出到文本文件中,如下图所示。

Windows AD中批量修改用户属性

取出的信息应该是类似下面的格式,

DN,displayName,sAMAccountName

"CN=张三,OU=students,OU=***,DC=***,DC=***,DC=***",张三,zhangsan

"CN=李四,OU=students,OU=***,DC=***,DC=***,DC=***",李四,lisi

其实后面的displayName是可以不取得,因为我要添加EmployeeID信息,但是员工表的信息和该AD导出的信息表顺序是不一致的,所以我需要做一个匹配,就需要使用员工的姓名进行Excel的匹配。

二、处理取得的信息

这步操作看起来是毫无技术含量,可是最花费时间的就是这一步,试想如果信息都有了,命令行一行代码下去,批处理也就是分分钟的事儿,但是信息的杂乱肯定会使你的命令执行出错,另外,如果信息错误那么你批量导入也就没有意义,所以说信息的操作也很重要。

首先,要修改用户信息,无疑要使用dsmod命令,当然我也百度了以下,powershell中也有命令处理AD的信息,但是执行修改什么的还是要借助第三方工具或者控件,找寻费时不说,命令的文档还不权威,所以就死了这条心,使用dsmod这现成的算了。

我需要的最终的用户信息是DN,cn,employeeID等,而在第一步中我已经拿到了前两个字段的信息,第二张表是相关部门提交过来的,包含employeeID和姓名的信息,这样的话两张表中的姓名信息是一致的,可以使用excel中的函数进行匹配,这样就能够把第二张表的employeeID匹配到第一张表中去,就得到了最终的信息。关于excel的使用我就不多介绍了,不会问度娘就好了。如果实在不行,作为IT人员,可以将这两张表都导入到数据库中,做一个连接操作,也可以得到想要的结果,不过这个就比excel麻烦的多了。

最终需要的信息格式如下:

DN,empid,displayname

"CN=张三,OU=students,OU=***,DC=***,DC=***,DC=***",0001,张三

"CN=李四,OU=students,OU=***,DC=***,DC=***,DC=***",0002,李四

但是实际上需要的信息,只有前两列,所以可以将第三列删除,毕竟只是匹配信息用的

DN,empid

"CN=张三,OU=students,OU=***,DC=***,DC=***,DC=***",0001

"CN=李四,OU=students,OU=***,DC=***,DC=***,DC=***",0002

OK,至此信息的获取就完成了。

三、命令行执行

命令行的话,我是参考了一些网上的文章的,如果你直接写dsmod user "CN=张三,OU=students,OU=***,DC=***,DC=***,DC=***" -empid 0001也可以,但是如果是1200条就有点困难了,不过网上总有有想法的网友,比如下面这篇文章的作者就想办法使用excel简化这个操作,通过csv文件的间隔符,将excel中的数据变为dsmod,,user,,"CN=张三,OU=students,OU=***,DC=***,DC=***,DC=***",,-empid,,0001等这么多列,然后再用批量替换将,,换为空格,然后直接将csv转换为txt就生成了一条一条的dsmod命令,然后做成一个bat文件,执行就可以了。

http://bbs.51cto.com/thread-967452-1.html

这么做也可以,但是这种做法的可替代性不是很强,如果下次再出现这样的问题,还是需要再生成1200条dsmod命令,所以我又想让计算机自己执行生成dsmod命令的方法,最后在另外一篇文章中看到,http://blog.chinaunix.net/uid-8303972-id-2033118.html,这篇文章的作者基本上和我的情况很相似,然后方法也是我想要的,但是一开始不太明白他的for语句,所以又专门去查了一下,这里补充一下for语句的说明,详见:http://blog.sina.com.cn/s/blog_62defbef0101outj.html

然后心里就有谱儿了,开始修改自己的脚本了

数据为保存为txt文件,其中内容类似如下格式:

a  b

"CN=张三,OU=students,OU=***,DC=***,DC=***,DC=***"  0001

"CN=李四,OU=students,OU=***,DC=***,DC=***,DC=***"  0002

然后命令行为:

FOR /F "skip=1 eol=; tokens=1,2,* delims= " %a in (C:\staff.txt) do dsmod user %a -empid %b

Windows AD中批量修改用户属性

狠敲回车键,命令行瞬间滑下:

Windows AD中批量修改用户属性

好吧,命令执行成功,happy.

最后,到AD中查看一下,员工ID属于扩展字段,要在AD上选择查看,高级功能,然后点击用户属性,在属性编辑器中可以找到,成功找到,OK,万事大吉,Over。

Windows AD中批量修改用户属性

继续阅读