我正尝试使用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)