zoukankan      html  css  js  c++  java
  • 通过VBA检索AD中的用户

          VBA作为一种被用在Microsoft Office产品中的脚本语言,功能实际上是很强大的,这要归功于它继承了Visual Basic的很多优良传统,如我们可以在VBA工程中像VB 6一样引入类库或ActiveX控件。当然,你在VB 6中使用的组件或控件也完成可以在VBA中使用,例如日期输入组件。
    6-18-2009 2-18-43 PM

            VBA支持ADO,这也意味着我们可以在VBA中操作数据库,包括SQL Server、Access等。正因为如此,你可以尝试着在Excel中编写一个VBA程序来将Excel作为一个用于数据同步的中间件,该中间件可以用来同步应用程序与后台数据库中的数据,并在其中做一些处理。这是完全可以做到的!我在之前的一个项目中就曾做过这样的例子,我们甚至通过Excel同步了SQL Server和Sharepoint List之间的数据(这个我会在随后的一些中再做介绍)。

          ADO的功能也很强大,我们可以在其中执行Windows脚本,经常使用的就是通过它来管理Windows Server的AD,如遍历AD中的账户,批量修改AD中的账户等,这已经没有什么好奇怪的了,你完全可以在Windows上使用记事本编写一个vbs脚本,然后直接使用它来管理你服务器上的AD,当然,基于安全考虑,这些都是需要适当的执行权限的。这些工作通过VBA也可以完成,并且在Excel中你会发觉有的时候很方便,如借用Excel现有的UI来展现所操作的数据;基于所查询的数据来生成图表;使用Excel提供的功能修改数据;遍历和组织数据的方便性等等...

          下面我给出一个示例。在新的Sheet中添加一个ActiveX Button,然后添加下面的代码。

    Private Sub CommandButton1_Click()
       
    On Error Resume Next

       
    Const ADS_SCOPE_SUBTREE = 2
        
       
    Set objConnection = CreateObject("ADODB.Connection")
       
    Set objCommand = CreateObject("ADODB.Command")
        objConnection.Provider
    = "ADsDSOObject"
        objConnection.Open
    "Active Directory Provider"
       
    Set objCommand.ActiveConnection = objConnection
        
        objCommand.Properties(
    "Page Size") = 1000
        objCommand.Properties(
    "Searchscope") = ADS_SCOPE_SUBTREE
        
        objCommand.CommandText
    = _
           
    "SELECT Name FROM 'LDAP://dc=XXX,dc=com' WHERE objectCategory='user'" 'search all users from the domn XXX
        Set objRecordSet = objCommand.Execute
        objRecordSet.MoveFirst
        
       
    Dim currCell As Range
       
    Set currCell = Range("A1")
        
       
    Do Until objRecordSet.EOF
            currCell.Value
    = objRecordSet.fields("Name").Value
           
    Set currCell = currCell.Offset(1, 0)
            objRecordSet.MoveNext
       
    Loop
    End Sub

          代码中我使用了一个假象的域名称XXX,读者如果想要测试可将其改成真实的域名称。我们使用ADO对所指定的域进行了用户查询,并将域中所有用户的Name依次输出到Excel当前Sheet的第一列中,下面是输出结果的部分截图。

    6-18-2009 2-46-32 PM

          有关如何通过脚本操作AD,读者可以参考一下Microsoft的官方文档http://www.microsoft.com/technet/scriptcenter/guide/sas_usr_ykxh.mspx?mfr=true

          如果权限允许,稍微修改一下上面的代码,完全可以实现批量修改AD中的账户的功能,鉴于公司网络环境,这里不方便进行测试了,读者如果有条件可以自己尝试。

  • 相关阅读:
    hdu 6702 ^&^ 位运算
    hdu 6709 Fishing Master 贪心
    hdu 6704 K-th occurrence 二分 ST表 后缀数组 主席树
    hdu 1423 Greatest Common Increasing Subsequence 最长公共上升子序列 LCIS
    hdu 5909 Tree Cutting FWT
    luogu P1588 丢失的牛 宽搜
    luogu P1003 铺地毯
    luogu P1104 生日
    luogu P1094 纪念品分组
    luogu P1093 奖学金
  • 原文地址:https://www.cnblogs.com/jaxu/p/1505849.html
Copyright © 2011-2022 走看看