【问题标题】:Query to LDAP from VBA / Excel从 VBA / Excel 查询到 LDAP
【发布时间】:2018-10-01 13:37:40
【问题描述】:

我们公司有一个员工目录,其中存储了员工 ID 和电子邮件地址。我想在 Excel 中创建一个 VBA,如果提供了员工 ID,它将搜索特定人员的电子邮件地址。

我们的 IT 部门给了我一行适用于 unix shell 脚本的代码:

ldapsearch -H ldaps://companydomain.net:636 -D “<your system account dn> -w <your system account password” -b “ou=people,o=company” employeeNumber=12345678 companyprimaryemailaddress

你能帮我写一个类似的 VBA 代码吗?我搜索了很多论坛并使用 ADODB.Connection 尝试了不同的解决方案,但未能成功。也许是因为我找不到使用“ldaps://”而不是“LDAP://”的示例...

非常感谢!

【问题讨论】:

  • 请展示您尝试过的方法并解释究竟是如何失败的。包括您遇到的所有错误。
  • 非常感谢您的 cmets。问题是我试图不是从 Active Directory 而是从特定服务器获取数据,我真的不知道如何查询该服务器。 GetObject("LDAP://RootDSE") 将我指向 Active Directory,但我无法修改代码以查询特定服务器。同时(因为我别无选择)我查看了我公司的整个 Active Directory,发现那里也可以找到 E-mail 和 ID 信息。因此,我构建了以下适用于我的 Power Query:

标签: vba ldap adodb ldap-query


【解决方案1】:

以下 Power Query 对我有用(“companysite.net”需要更改为可以使用 GetObject("LDAP://RootDSE") 找到的实际站点名称):

let
    Source = ActiveDirectory.Domains("companysite.net"),
    #"Expanded Object Categories" = Table.ExpandTableColumn(Source, "Object Categories", {"Category", "Objects"}, {"Category", "Objects"}),
    Objects = #"Expanded Object Categories"{0}[Objects],
    #"Expanded organizationalPerson" = Table.ExpandRecordColumn(Objects, "organizationalPerson", {"employeeID", "mail"}, {"organizationalPerson.employeeID", "organizationalPerson.mail"}),
    #"Removed Other Columns" = Table.SelectColumns(#"Expanded organizationalPerson",{"organizationalPerson.employeeID", "organizationalPerson.mail"}),
    #"Filtered Rows" = Table.SelectRows(#"Removed Other Columns", each ([organizationalPerson.employeeID] <> null))
in
    #"Filtered Rows"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 2023-03-17
    相关资源
    最近更新 更多