萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> java >> 通過VBA檢索AD中的用戶

通過VBA檢索AD中的用戶

class="area">

VBA作為一種被用在Microsoft Office產品中的腳本語言,功能實際上是很強大的,這要歸功於它繼承 了Visual Basic的很多優良傳統,如我們可以在VBA工程中像VB 6一樣引入類庫或ActiveX控件。當然,你 在VB 6中使用的組件或控件也完成可以在VBA中使用,例如日期輸入組件。

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

copyright © 萬盛學電腦網 all rights reserved