我有以下 VBA 代码,用于搜索特定用户并从 Active Directory 输出全名、电子邮件和部门:
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
它可以在所有子域中搜索?