【问题标题】:LDAP query with exchange object带有交换对象的 LDAP 查询
【发布时间】:2012-07-21 10:36:40
【问题描述】:

我正在尝试通过 ldap 查询获取一些属性,如下所示:

import win32com.client
ldap="SELECT cn, displayName From 'LDAP://DC=abc,DC=com' WHERE legacyExchangeDN = '{}'"
c = win32com.client.Dispatch('ADODB.Connection')
c.Open('Provider=ADsDSOObject')
rs,rc = c.Execute(ldap.format(dn))
while not rs.EOF:
    for e in rs.fields:
        print('{}: {}'.format(e.Name, e.Value))
    print()
    rs.MoveNext()

但是如果dn是以下两个值就不行了。

/o=sinotrans/ou=First Administrative Group/cn=Configuration/cn=Servers/cn=myserver/cn=Microsoft Public MDB
/o=sinotrans/ou=first administrative group/cn=configuration/cn=servers/cn=myserver/cn=microsoft system attendant

我认为交换对象与活动目录用户不同。但是如何更改 ldap 查询表达式呢?任何建议表示赞赏。

【问题讨论】:

  • 那么您必须告诉我们这些对象的实际外观。
  • @EJP 是一个交换公用文件夹对象,位于'CN=SG1-PF1,CN=SG1,CN=InformationStore,CN=myserver,CN=Servers,CN=Hq Administrator GroupA,CN=Administrative Groups,CN=abc,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=intranet,DC=sinotrans'。它的 legacyExchangeDN 值为'/o=sinotrans/ou=First Administrative Group/cn=Configuration/cn=Servers/cn=myserver/cn=Microsoft Public MDB'。以上代码可以通过 legacyExchangeDN 找出任何活动目录用户。我猜想 ldap 路径导致它不适用于交换对象

标签: python active-directory ldap exchange-server


【解决方案1】:

我发现交换对象存储在CN=Configuration,DC=intranet,DC=sinotrans,并且需要将DC服务器与管理员凭据绑定。以下代码适用于合适的用户名、密码和 LDAP 路径。

import win32com.client

adoConnection = win32com.client.Dispatch('ADODB.Connection')
adoCommand = win32com.client.Dispatch('ADODB.Command')
adoRecordset = win32com.client.Dispatch('ADODB.Recordset')

adoConnection.Provider = 'ADSDSOObject'
adoConnection.Properties('User ID').Value = 'user'
adoConnection.Properties('Password').Value = 'password'
adoConnection.Properties('Encrypt Password').Value = True
adoConnection.Properties('ADSI Flag').Value = 1 
adoConnection.Open('Active Directory Provider')

adoCommand.ActiveConnection = adoConnection
adoCommand.Properties('Page Size').Value = 1000

ldap = '''\
SELECT cn, mail
From 'LDAP://CN=Configuration,DC=abc,DC=com'
WHERE legacyExchangeDN = '/o=abc/ou=first administrative group/cn=configuration/cn=servers/cn=myserver/cn=microsoft public mdb'
'''

adoCommand.CommandText = ldap
adoRecordset.Open(adoCommand)
while not adoRecordset.EOF:
    print('{} {}'.format(adoRecordset('cn'), adoRecordset('mail')))
    adoRecordset.MoveNext()
adoRecordset.Close()

adoConnection.Close()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2021-07-04
    相关资源
    最近更新 更多