如何将Windows Server域(AD活动目录)中的用户导出并导入至Outlook2010通讯簿
在企业中如何同步所有的用户至邮件联系人,尤其是在增加了新员工的情况下是一个很常见的问题,解决办法之一就是将域用户中所有用户的Email加入至邮件客户端的通讯簿中。Windows 域用户管理在企业中有着广泛的应用,确实是是十分强大,是管理用户的利器。
下面就是我所摸索出来的一种实现方式:
首先要使用工具Csvde,将域中的所有用户导出,由于我们公司域管理员在增加员工的时候并没有填写Email及部门信息,所以我这里采用了其他方式来获取Email及部门信息,但是强烈建议域用户管理员再增加用户的时候将信息维护的尽量全一些,这样才能最大限度发挥域的作用。
Csvde下载地址
http://www.microsoft.com/downloads/en/details.aspx?FamilyId=9688F8B9-1034-4EF6-A3E5-2A2A57B5C8E4&displaylang=en
在Cmd中输入csvde -d "ou=users,ou=XXXgroup,DC=XXXX,DC=com" -r "(&(objectcategory=person)(objectClass=user))" -l "name,userPrincipalName" -f c:/email.csv -s xxx.com
-d"ou=users,ou=XXXGroup,DC=XXXX,DC=Com"中ou是组织结构,ou=users,ou=XXXXgroup代表的含义是XXXXGroup组织下的users组织,这是层级结构表示,命令行中由左至右对应层次中的由低至高。DC是域名,也是层级结构,DC=XXXX,DC=Com,表示Com下的XXXX也就是域名XXXX.com。比如abc.XXX.com对应DC=abc,DC=XXXX,DC=Com。
-r "(&(objectcategory=person)(objectClass=user))"是筛选要导出的数据,(objectClass=user)是定义大类,只导用户信息,但是AD的user 除了用户信息还包括computer等信息,所以再用(objectcategory=person)筛选,这样就只有用户信息了,如果这里省略就会导出所有AD信息相当乱。
-l "name,userPrincipalName"是需要导出用户信息具体字段,这里分别是名称和登录名,其它的字段可以参见下面图片。
-f c:/ email.csv指的是导出文件路径,但是用户的中文信息会以16机制代码显示,所以后面加一个-u,但这也有弊端,加-u后导出数据就混在一列里,可以用excel的分列功能分开即可。
-l参数所需的用户信息具体字段,比如在域中维护了部门及Email地址,我们可以在导出用户的时候加上-l "mail,department"。由于我们公司没维护部门和email,所以采取了别的办法得到他们。
我这里导出的Excel结果如下:
可以看到在DN这一列存在用户的姓名,以及所隶属的组织,我们公司是使用子公司->部门->姓名的层级结构。对应在Excel里的DN就是CN=XXX,OU=XXX部门,OU=XXX公司。而userPrincipalName正好就是Email的地址,也就是采用了姓名@公司域名的形式。
下一步所要做的就是得到姓名,部门,公司就可以了。采用的方式就是使用Excel公司来拆分字符串。
关键的计算公式如下,以G列为例,G列是获取第一个与第二个逗号之间的内容 =MID(A2,LEN(F2)+2,FIND(",",A2,LEN(F2)+2)-LEN(F2)-2) F列为从A列取出第一个逗号前的内容。I列是使用MID函数来截取F列第4个字符到最后的内容。
最后我们把有用的内容复制出来,形成最终的通讯簿Excel。如下:
最后,我们将它导入到Outlook 2010中。操作如下:
通过拖拽即可,另外注意电子邮件这个地方,要把Excel中的Email列对应到Outlook中的电子邮件地址。同时如果你希望在发件人位置能够显示用户名的话,就需要你在Excel中将姓名列在复制到一列,起个名比如Email姓名,然后将Excel中的Email姓名这一列拖拽到outlook中的电子邮件显示名称即可,这样发邮件的时候就会在收件人处显示姓名+email地址,而不仅仅是Email地址了。
点击确定,然后导入即可。导入后的结果如下