Alien的博客

批量创建域用户的那些事

之前在客户的的一个项目里做过一个批量创建域用户的事情,用脚本创建了四五千个用户,这个过程简直就是各种坎坷、各种坑啊。之前见过论坛里很多 人提到批量创建用户的事情,网络上也有很多的脚本可以参考,但是那些脚本都是在理想状态下使用的,在生产环境下还是会碰到很多问题的,我在这里就不提技术 的实现过程了,仅仅分享一下在那个项目里的心得吧,基本上都是需要注意的地方。
大多数人的习惯是使用一个脚本去读包含有用户信息的csv的表格文件,之后去运行一条命令来实现创建用户的功能。这种csv文件一版都是公司的人事部门的同事给的,可他们给的的表格里的内容并不是完全“合格”的。

1.用户姓名问题

姓名一半都是两个字或者三个字的,有的HR为了表格看起来美观会把两个字的姓名中间加一个空格来,这样可就麻烦了,我们的脚本不认识这样的格式可能会直接报错的。
所以我们先要用excel打开csv文件,之后用excel函数直接把名字中的空格去掉。

2.用户信息空白项

一般我们的表格中会包含很多条目,姓名啊,电话啊,部门啊,职位啊乱七八糟的,可是现实中可能会有一部分人的信息不全,比如没有电话,这样在命令执行的时候电话那一行为空也会直接报错的
至于解决方法,如果人员信息缺失条目不多那就直接先手动写上,等用户创建完成后再给他清空就完事了。
可万一好多人的信息确实很严重呢,我们可以把表格直接丢回给HR,让他去改,但要是如果他不改呢,好吧,我当时确实是遇到这个问题了
我当时的解决方法是先用脚本把用户的必要信息创建出来,何为必要的信息,就是创建用户时候必须要填写的项目,例如姓名啊,upn啊,samid啊,密码 啊,ou啊什么的,等用户创建完成后,在用脚本去读取csv文件去修改我们已经创建好的用户,而且是一个条目一个条目的修改,比如先批量把用户的电话信息 修改好,之后在把用户的地址信息修改好,至于那些为空的条目,命令运行的时候会直接报错,那也无所谓对我们没有什么影响了。

3.用户所在ou的问题

域中ou的划分大多数是使用部门来划分吧,一些很大的企业部门结构错综复杂,所以ou也比较复杂,如果完全是一套新的环境也就无所谓了,直接就把ou按照表格里的信息创建出来就完事了,创建ou的时候也要一级一级的批量创建,先创建第一级ou,之后创建第二级ou
如果你要创建的用户是一套老的环境那就要小心了,因为很有可能旧环境中的ou结构和hr给你的表格不是完全匹配的,那这样创建的时候还会一大堆报错,而且 查起来比较费劲。好吧,这种情况又被我遇到了,我当时使用了一个比较笨但是看起来很保险的做法,就是先手动创建一个临时ou,之后在临时ou下创建表格中 的ou结构,之后在这个结构里面把表格里的用户创建出来,等创建完成之后,再手动把用户移动到指定的ou中去。

4.设置经理信息

我当时在创建用户的时候,客户还要求我把用户的经理指定好,表格里给出的经理那一栏是一个中文的姓名,我当时的想法是创建好用户后再使用dsmod设置经 理信息,可是使用dsmod设置经理信息的时候必须要使用“可分辨名称“,也就是说要同时把经理所在的ou指定出来才行,如果用户和经理都在一个ou下那 还好说,都调用用户所在ou路径就行了,可是实际情况是经理和用户有很多并不在一个ou下,如果还用dsmod来修改经理名称的话那就要很费劲的改动脚本 了,那有没使用samid来指定的方法呢。
庆幸的是使用powershell命令可以完全使用samid名称来指定经理信息。不过问题又来了,表格中的经理名称是汉字,怎么才能让他生成samid 名字呢,我当时决定再次使用excel函数来做,把表格中的经理姓名和samid来筛选出来,之后再通过powershell为用户指定经理,可是的可是 啊,万一再用excel函数来处理信息的时候出现经理重名怎么办?这。。。我当时又用了另外一个excel函数来检查用户重名的,发现重名的还真有,也只 能手动改了。

5.账户重名

上面提到了经理重名的信息,其实还有一个问题是用户重名怎么办?用户不重名但是读音相同导致samid重名怎么办?我很走运,这些问题我都遇到了,都通过excel函数筛选出来并给他们改名了,真心觉得excel函数太强大了。

6.日志输出

上面写了这么多大多数都是准备工作,都是在执行创建用户脚本之前要做的准备和检查工作,执行脚本之前还有一个最重要的工作就是设置日志输出,就是要把你所 有执行后的结果输出出来,执行成功的结果和执行失败的结果都需要输出出来,我当时遇到的情况是本来用户都已经在域中存在了,HR给的表格里还是让我创建这 个用户,所以因为重名导致我创建用户失败了,因为我脚本是分批执行的,先创建后修改,还好我当时日志查到了创建失败的原因,才没有去执行修改的脚本,不然就直接把老用户给修改掉了(后来看了一下已存在用户的信息,都是boos级别的,有惊无险啊)

好了,差不多就这些了,时间太长了,都有点忘了当初是怎么做的了,甚至我已经忘记了当初使用的是哪些excel函数来修改表格了,只是凭着记忆敲下 了上面的那几条,感觉我扯了半天都没怎么扯到脚本的事情,都是在扯excel函数,如果确实在生产环境中做过这个事情的人应该会对我写的以上几条也深有感触吧。