解析列表以获得确切的值

2024-03-29 11:48:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过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]

Tags: comreadtimelocalstatusgoogleouch
2条回答

我不确定activedirectory如何构造它的属性,但我相信您可以使用通配符*通过更改搜索来获取组。你知道吗

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

Microsoft's site包含有关LDAP搜索筛选器的信息,这些筛选器很可能与AD相关

您可以使用regex从各个组条目中提取组名:

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

尽管我认为@Nathan McCoy的答案最终可能会带来一个更干净更好的解决方案。你知道吗

相关问题 更多 >