0

次のように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 が次の 2 つの値の場合は機能しません。

/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

交換対象はActive Directoryユーザーとは違うと思います。しかし、ldap クエリ式を変更するにはどうすればよいでしょうか? どんな提案でも大歓迎です。

4

1 に答える 1

0

Exchange オブジェクトが に保存されていることがわかり、CN=Configuration,DC=intranet,DC=sinotransDC サーバーを管理者の資格情報にバインドする必要があります。次のコードは、適切なユーザー名、パスワード、および 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()
于 2012-07-24T03:32:50.940 に答える