活动目录里导出用户信息后在Access里update数据的"风波"

将Username及部门从活动目录里导出.实现过程:本人试过很多种导出方法,有:csvde,dsquery,net group均感觉不完美,最后个人还是:
第一:将user.vbs拷贝到DC上去,注意编辑一下user.vbs里边的你的对应的部门信息。当然可以修改成您想提取的字段,呵呵。

 
  
  1. Set objGroup = GetObject("LDAP://CN=工程部,OU=Groups,OU=beijing,DC=ceri,DC=com,DC=cn")  
  2. objGroup.GetInfo  
  3. arrMemberOf = objGroup.GetEx("member")  
  4. For Each strMember in arrMemberOf  
  5.         Set objUser = GetObject("LDAP://" & strMember)  
  6.     objUser.GetInfo  
  7.     WScript.Echo objUser.sAMAccountName & "," & "工程部" & "," & objUser.Displayname & "," &  objUser.Department  
  8. Next 

第二:在DC上开一个CMD窗口,CD到user.vbs所在的目录,运行:

 
  
  1. cscript user.vbs>user.csv  

重复多次这个操作即将AD中这些安全组成员顺利导出并进行合并user.csv


公司有一个监控打印的Access库,但对于已产生的监控结果也要进行一次更新,具体情况如下图:

通过上边步骤生成的user.csv,(将user.csv导入到Access的一个临时表上,然后用下文一样的方法,故在此略过这个过程)很顺利导入完成公司300多人的域帐号(字段:UserName)与部门一一对应到UserReg里的字段:DeptName上:

 

 

可是2012年1月至今不到两个月已产生了监控记录达4000多条如下图,在部门字段:DeptName上全是未设定:

我们要将PrtData表里的DeptName通过表:UserReg里的部门信息更新过来,那么有一个关系是:这两个表均有一个UserName

熟悉MSSQL的朋友可以会第一反映写出:

 
  
  1. update PrtData set PrtData.DeptName=UserReg.DeptName from PrtData,UserReg where PrtData.UserName=UserReg.UserName  

可是,Access里的update是没有from子句的,翻阅BAIDU,看到好多人说让我导到MSSQL里去做,然后导回来,天,那确实是个体力活,然后温习了一下Access,顺利解决问题:

 
  
  1. update PrtData,UserReg set PrtData.DeptName=UserReg.DeptName where PrtData.UserName=UserReg.UserName 

特此留存。供自己和自己一样情况的朋友们参考,少走弯路。