You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 17:07:13