python-ldap将成员添加到Active Directory组

我正尝试使用python-ldap模块将脚本添加到Active Directory组中。 这是我迄今为止的尝试:

import ldap from ldap import modlist as modlist l = ldap.initialize(server) l.simple_bind_s(username, password) l.set_option(ldap.OPT_REFERRAL) old_members = new_members = dict() new_members['member'] = 'cn=Forename Name,ou=Users,dc=DOMAIN' old_members group_dn = 'cn=GROUP,ou=Groups,dc=DOMAIN' try: ldif = modlist.modifyModlist(old_members,new_members) l.modify_s(group_dn, ldif) except ldap.LDAPError,e: print e 

我得到这个错误: LdapError: DSID-0C090C48, comment: Error in attribute conversion

在searchGoogle之后,我不知道这个错误来自哪里。

我会很高兴有一个提示,或其他方式来添加用户组,这应该是一个相当普遍的任务从python-ldap

非常感谢

我在看你的代码,我认为这一行创build了两个指向同一个字典的指针:

old_members = new_members = dict()

这会导致ldif对象在运行这行时等于[]:

ldif = modlist.modifyModlist(old_members,new_members)

改变

 old_members = new_members = dict() 

 old_members = dict() new_members = dict() new_members['member'] = 'cn=Forename Name,ou=Users,dc=DOMAIN' 

我testing过,没关系。

 from ldap3 import Server, Connection, ALL, NTLM from elizabeth import Personal, Address,Text from ldap3.extend.microsoft.addMembersToGroups import ad_add_members_to_groups as addUsersInGroups import random serverName='dc1.stand.local' connUser="stand.lsd\\Admin" connUserPwd="" usersOU = 'ou=test-ou,dc=stand,dc=local' groupsOU = 'ou=test-groups,dc=stand,dc=local' usersDnList = [] groupsDnList = [] server = Server(serverName, get_info=ALL) conn = Connection(server, user=connUser, password=connUserPwd, authentication=NTLM) conn.bind() #must be TRUE conn.add(usersOU, 'organizationalUnit') # add test-ou for users conn.add(groupsOU, 'organizationalUnit') # add test-ou for groups data = Text('en') for _ in range(0,10): currentGroup = 'cn='+data.word()+',ou=test-groups,dc=stand,dc=local' groupsDnList.append(currentGroup) conn.add(currentGroup, 'group') address = Address('en') person = Personal('en') for _ in range(0,10): address_country = address.country() conn.add('ou='+address_country+',ou=test-ou,dc=stand,dc=local', 'organizationalUnit') for _ in range (0,10): name = person.name(gender='male') surname = person.surname(gender='male') currentUser = 'cn='+name+'.'+surname+','+'ou='+address_country+',ou=test-ou,dc=stand,dc=local' usersDnList.append(currentUser) conn.add(currentUser, 'User', {'givenName': name, 'sn': surname, 'departmentNumber': 'DEV', 'telephoneNumber': 1111}) for _ in range(0,300): rndUser = random.choice(usersDnList) rndGroup = random.choice(groupsDnList) addUsersInGroups(conn, rndUser, rndGroup)