1
所有域我有搜索一個特定的用戶和輸出的全名,電子郵件和部門從Active Directory以下VBA代碼:VBA:LDAP搜索通過森林
Public Type LDAPUserInfo
FullName As String
Email As String
Department As String
AccountStatus As String
End Type
Function FindUser(ByVal username) As LDAPUserInfo
On Error GoTo Err
Dim objRoot As Variant
Dim LDAPdomainName As String
Dim cn As Variant
Dim cmd As Variant
Dim rs As Variant
Dim LDAPUserInfo As LDAPUserInfo
Set cn = CreateObject("ADODB.Connection")
Set cmd = CreateObject("ADODB.Command")
Set rs = CreateObject("ADODB.Recordset")
Set objRoot = GetObject("LDAP://RootDSE")
LDAPdomainName = objRoot.Get("defaultNamingContext") 'Contains the distinguished name for the domain of which this directory server is a member.
'http://msdn.microsoft.com/en-us/library/windows/desktop/ms684291(v=vs.85).aspx
cn.Open "Provider=ADsDSOObject;"
cmd.activeconnection = cn
'cmd.commandtext = "SELECT ADsPath FROM 'LDAP://" & Domain & "' WHERE sAMAccountName = '" & UserName & "'"
'To see all attributes names available, connect with Active Directory Explorer and add to Select.
cmd.commandtext = "SELECT cn, mail, physicalDeliveryOfficeName, userAccountControl FROM 'LDAP://" & LDAPdomainName & "' WHERE sAMAccountName = '" & username & "'"
Set rs = cmd.Execute
Debug.Print rs("cn") & " E-mail: " & rs("mail") & " Dept: " & rs("physicalDeliveryOfficeName")
LDAPUserInfo.FullName = Nz(rs("cn"), "")
LDAPUserInfo.Email = Nz(rs("mail"), "")
LDAPUserInfo.Department = Nz(rs("physicalDeliveryOfficeName"), "")
FindUser = LDAPUserInfo
If Not rs Is Nothing Then rs.Close
If Not cn Is Nothing Then cn.Close
Exit_Err:
Set rs = Nothing
Set cmd = Nothing
Set cn = Nothing
Set objRoot = Nothing
Exit Function
Err:
If Err <> 0 Then
MsgBox "Error connecting to Active Directory Database: " & Err.Description & vbCrLf & _
"User: " & username, , "Error: " & Err.Number
Else
If Not rs.BOF And Not rs.EOF Then
rs.MoveFirst
MsgBox rs(0)
Else
MsgBox "Not Found"
End If
End If
Resume Exit_Err
End Function
它與用戶是在主要領域。有沒有辦法改變LDAPdomainName
,以便它可以搜索所有子域?