1

我正在尝试通过 LDAP 查询 Active Directory 以列出组,但我得到的信息超出了我的需要。如何解析结果以仅获取所有组名。例如:LOCAL_java_read和其他人而不是来自结果的其余人。

from ldap3 import Server, Connection, ALL
server = Server('xxx', port=389, get_info=ALL)
conn = Connection(server, 'username', 'password', auto_bind=True, raise_exceptions=True)
conn.search('OU=Groups,OU=CH,DC=google,DC=com', '(objectclass=group)')
groups=conn.entries
print (groups)

结果:

[DN: CN=LOCAL_java_read,OU=Groups,OU=CH,DC=google,DC=com - STATUS: Read - READ TIME: 2019-03-27T14:22:08.072330
, DN: CN=LOCAL_python_read,OU=Groups,OU=CH,DC=google,DC=com - STATUS: Read - READ TIME: 2019-03-27T14:22:08.072330
, DN: CN=LOCAL_php_read,OU=Groups,OU=CH,DC=google,DC=com - STATUS: Read - READ TIME: 2019-03-27T14:22:08.072330]
4

2 回答 2

0

我不确定 Active Directory 如何构建其属性,但我相信您可以使用通配符*通过更改搜索来获取组。

conn.search('OU=Groups,OU=CH,DC=google,DC=com', '(&(objectClass=group)(CN=*))')

Microsoft 的站点有关于最有可能与 AD 相关的 LDAP 搜索过滤器的信息。有一些关于通配符的例子

于 2019-03-27T13:46:07.013 回答
0

您可以使用正则表达式从各个组条目中提取组名:

import re
stripped_groups = [re.sub(r'^.+? CN=([^,\s]+),?.*$', r'\1', str(entry)) for entry in groups]
print(stripped_groups)

尽管我认为@Nathan McCoy 的回答最终可能会导致更清洁、更好的解决方案。

于 2019-03-27T13:57:26.490 回答