求助:用Python从Active Directory导出活跃用户至Excel(ldap3模块问题)
解决方法:用Python从Active Directory获取活跃用户并导出Excel
第一步:确保ldap3模块正确安装
先确认VSCode使用的Python环境已安装ldap3。打开VSCode终端,执行:
pip install ldap3
如果用了虚拟环境,先激活环境再执行上面的命令。
第二步:完整代码实现
以下是可直接运行的代码,包含AD连接、活跃用户查询、Excel导出功能:
from ldap3 import Server, Connection, ALL, SUBTREE import pandas as pd # 替换为你的AD实际配置 AD_SERVER = '你的AD服务器地址' # 示例:'dc.yourdomain.com' AD_USER = '域账号' # 示例:'yourdomain\\username' AD_PASSWORD = '账号密码' BASE_DN = '搜索基准DN' # 示例:'OU=Staff,DC=yourdomain,DC=com' def get_active_ad_users(): # 连接AD服务器 server = Server(AD_SERVER, get_info=ALL) conn = Connection(server, AD_USER, AD_PASSWORD, auto_bind=True) # 过滤条件:仅获取启用的用户(排除userAccountControl中bit 2被设置的账号) search_filter = '(&(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))' # 要获取的用户属性,可按需增减 attributes = ['cn', 'sAMAccountName', 'mail', 'department', 'telephoneNumber'] # 执行搜索 conn.search(search_base=BASE_DN, search_filter=search_filter, search_scope=SUBTREE, attributes=attributes) # 格式化查询结果 users = [] for entry in conn.entries: user_data = { '姓名': entry.cn.value, '账号': entry.sAMAccountName.value, '邮箱': entry.mail.value if hasattr(entry, 'mail') else '', '部门': entry.department.value if hasattr(entry, 'department') else '', '电话': entry.telephoneNumber.value if hasattr(entry, 'telephoneNumber') else '' } users.append(user_data) # 关闭连接 conn.unbind() return users def export_to_excel(users, filename='活跃AD用户列表.xlsx'): # 用pandas导出到Excel df = pd.DataFrame(users) df.to_excel(filename, index=False) print(f'文件已导出:{filename}') if __name__ == '__main__': active_users = get_active_ad_users() export_to_excel(active_users)
第三步:代码说明与注意事项
- 必须替换代码中的AD配置信息为你的实际环境数据,包括服务器地址、域账号、密码和搜索基准DN。
userAccountControl:1.2.840.113556.1.4.803:=2是LDAP位运算过滤规则,用于排除被禁用的用户。- 若未安装pandas,需执行
pip install pandas openpyxl(openpyxl是pandas导出Excel的依赖库)。 - 连接AD失败时,优先检查网络连通性、账号权限、服务器地址和账号格式是否正确。
常见ldap3问题排查
- 模块导入报错:确认终端pip对应的Python版本与VSCode选中的解释器版本一致(VSCode左下角可切换解释器)。
- 查询无结果:检查搜索基准DN是否正确,可暂时去掉禁用用户过滤规则,先验证能否查到用户数据。
- 权限不足:确保使用的域账号拥有读取AD用户信息的权限。
内容的提问来源于stack exchange,提问作者Kristina Wayne
相关产品推荐
相关产品推荐

