以递归方式更改Active Directory中域中的所有用户属性

时间:2012-04-20 07:53:18

标签: recursion vbscript attributes active-directory ldap

我有一个小脚本(VBS)来更改所有用户的网站属性:

    dim objOU, objUser 

    objOU="OU=Users,DC=mysociety,DC=local"  

    Set objOU = GetObject("LDAP://" & objOU)  

on error resume next 
For each objUser in objOU  
    If objUser.Class="user" Then  
            Set objUser = GetObject("LDAP://" & objUser.distinguishedName) 
        objUser.Put "wWWHomePage", "http://mysite.mysociety.local/Person.aspx?accountname=mysociety\" & objUser.mailNickname
        objUser.setInfo 
        if err.number <> 0 then 
            wscript.echo "Error processing " & objUser.givenName & ":" & err.number & ", " & err.Description 
            err.clear 
        end if 
    End if 
Next  

所以我的问题是,如果我将objOU精确到最深的目录,它就能完美运行。但它不是一个递归脚本,并且由于子目录,使用此代码它不起作用。 我是VBS的初学者,你能帮我把这个脚本递归吗?

先谢谢你,请原谅我的英语不好

1 个答案:

答案 0 :(得分:0)

使用线程可以非常有效地完成此任务。在一个线程中,执行搜索 其中,基础对象是目录信息树(DIT)中的所有点 存储必须修改的条目。使用whole subtree作为搜索范围和a 过滤器将搜索结果缩小到仅需要修改的条目。使用 OID 1.1表示请求的属性列表(这将导致目录服务器返回 只有尊贵的名字)。假设目录管理员允许此搜索 - 它可能是 由于资源原因或安全原因或其他原因而被拒绝 - 随着搜索结果的到来, 使用另一个线程来构造正在进行的可分辨名称的修改 在搜索主题中返回。为了获得最大效率,请使用多个线程来制作 修改并为您的API使用适当的并发机制。

另见