我正在尝试通过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查询表达式?任何建议都表示赞赏。
答案 0 :(得分:0)
我发现交换对象存储在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()