0

我正在使用 Access 2003,并且已经有一个从 LDAP 中提取大量数据的代码。这是我得到的:

Set rootDSE = GetObject("LDAP://RootDSE")
domainContainer = rootDSE.Get("defaultNamingContext")

conn.provider = "ADSDSOObject"
conn.Open "ADs Provider"

ldapStr = "<LDAP://" & domainContainer & ">;(& (mailnickname=" & nickname & ") (| (&(objectCategory=person)(objectClass=user)(!(homeMDB=*))(!(msExchHomeServerName=*)))(&(objectCategory=person)(objectClass=user)(|(homeMDB=*)(msExchHomeServerName=*))) ));adspath;subtree"
exchangeRS.Open ldapStr, conn, adOpenStatic, adLockReadOnly
exchangeRS.MoveFirst

Do Until exchangeRS.EOF
    Set oUser = GetObject(exchangeRS.fields(0).value)

    ' The properties below are working
    'oUser.firstName
    'oUser.displayName
    'oUser.title
    'oUser.telephoneNumber
    'oUser.mobile
    'oUser.faxNumber
    'oUser.streetAddress
    'oUser.l
    'oUser.postalCode
    'oUser.mail
Next

我能够为 LDAP 数据库中的每个人获取大量信息。但是,我也想得到结构单元。但是,oUser.organizationUnit不退出,oUser.OU只包含顶部单元,这不是我想要的。

有没有办法列出 oUser 的所有属性以找到正确的?是不是ldapStr缺少了什么?

这是我想要得到的图像(对不起,它是法语):

单元

这有可能没有存储在 LDAP 中吗?如果没有,有什么方法可以从 Outlook 通讯录中获取?但实际上我真的更喜欢从 LDAP 获取它,因为其他所有信息实际上都在那里(这让我相信这也应该在那里)。

4

3 回答 3

1

查看 distinctName 属性。这是一个包含 OU 的相对专有名称 (RDN) 序列

于 2012-10-17T13:55:43.413 回答
1

这是我发现找出哪些数据在哪些字段中的最佳方法。将架构转储为文本,然后将该文本加载回 Excel,只需少量连接操作即可制作输出行,然后将其反馈给 VBA 以转储 AD 中的所有数据,以便您查看哪些信息存储在何处.

第 1 步:获取架构字段

Function SchemaToText()
    Set objSysInfo = CreateObject("ADSystemInfo")
    Set objUser = GetObject("LDAP://" & objSysInfo.userName)
    Set objSchema = GetObject("LDAP://schema/user")
    OutFile = Application.DefaultFilePath & "\schemalist.txt"
    Debug.Print "Exporting to " & Application.DefaultFilePath & "\schemalist.txt"
    Open OutFile For Output As #1
    For Each strAttribute In objSchema.MandatoryProperties
        Write #1, strAttribute
    Next
    For Each strAttribute In objSchema.OptionalProperties
        Write #1, strAttribute
    Next
    Close #1
End Function

第 2 步:您的所有字段周围都会有双引号,因此我们需要删除它们。在记事本(或您选择的其他文本编辑器)中打开 schemalist.txt,然后使用替换功能查找所有双引号并将其删除

第 3 步:将 schemalist.txt 加载到 Excel 中的新电子表格中(为了本教程,我们假设它已放入单元格 A1)

第 4 步:构建用于转储字段值的写入命令 - 在单元格 B1 中,输入以下内容:

=Concatenate("Write #1, ","""",".",A1,"|",""""," & .",A1)

你现在应该有这样的东西:Write #1, ".cn|" & .cn. 现在您只需要为整个模式列表填写该连接公式。

第 5 步:将写入列表粘贴到以下公式中:

Function UserSchemaDump()
    Set objSysInfo = CreateObject("ADSystemInfo")
    Set objUser = GetObject("LDAP://" & objSysInfo.userName)
    OutFile = Application.DefaultFilePath & "\schemadump.txt"
    Debug.Print "Exporting to " & Application.DefaultFilePath & "\schemadump.txt"
    Open OutFile For Output As #1
    With objUser
        'paste all of the write lines here
        Write #1, ".cn|" & .cn
        Write ...
        Write #1, ".x500uniqueIdentifier|" & .x500uniqueIdentifier
    End With
    Close #1
    Debug.Print "Export complete"
End Function

第 6 步:将 schemadump.txt 加载回 Excel,使用文本到列拆分|,然后格式化为没有标题的表格并对第 2 列进行排序,以查看正在使用的字段以及每个字段中放置的数据。

于 2020-01-31T13:34:36.083 回答
0

我所有测试的结果表明,这些数据没有存储在 LDAP 中。

于 2012-10-22T00:57:35.770 回答