项目介绍
本工具用于实现企业微信组织架构与Active Directory (AD)域之间的自动同步,帮助企业维护统一的用户目录和组织结构。通过定期同步,可以确保企业微信中的部门和用户信息与AD域保持一致。
注:基于ldaps协议同步修改,注意启用AD域控的ldaps协议,具体可以AI或者百度开启教程;源码和编译好的程序包在附件中,请根据文档注意生成config.ini文件。
核心特性
- 安全可靠:采用LDAPS (LDAP over SSL)协议进行AD域通信,确保数据传输安全
- 智能容错:内置continue-on-error机制,单个操作失败不影响整体同步
- 批量优化:使用批量操作减少网络往返,显著提升同步性能
- 增量同步:支持仅同步变更的用户,大幅提升效率
- 详细审计:自动生成操作日志(CSV)和验证报告(TXT)
主要功能
- 自动同步企业微信组织架构到AD域:将企业微信的部门结构自动同步到AD域中的OU结构
- 用户账户自动管理:自动创建、更新和禁用AD用户账户
- 组成员批量管理:批量处理用户组分配,提升同步效率
- 定时任务:支持按计划定时执行同步任务
- 实时监控:直观的界面展示同步进度和结果统计
- 日志记录:详细记录同步过程,支持日志过滤和导出
- 系统托盘运行:可最小化到系统托盘在后台运行
- 机器人通知:支持同步结果通过企业微信机器人通知
- 同步取消:支持优雅地中断正在进行的同步任务
系统要求
- Windows操作系统(Windows 10/11 或 Windows Server 2016/2019/2022)
- Active Directory域环境,支持LDAPS (端口636)
- 拥有足够权限的域管理员账户
- Python 3.9+(如使用打包版本则无需单独安装Python)
- 企业微信自建应用及管理员权限
安装方式
方式一:使用打包好的可执行文件(推荐)
- 下载
dist目录下的可执行文件 - 将以下文件复制到同一目录:
WeCom-AD-Sync.exe- GUI主程序WeCom-AD-Sync-Console.exe- 控制台版本(可查看详细输出)Test-LDAP.exe- LDAP连接测试工具Test-WeCom-API.exe- 企业微信API测试工具config.ini- 配置文件
- 双击运行
WeCom-AD-Sync.exe
方式二:从源码运行
- 克隆或下载此仓库
- 创建虚拟环境(可选但推荐):
python -m venv venv venv\Scripts\activate - 安装依赖:
pip install -r requirements.txt - 运行程序:
python wecom_sync_ui.py
配置说明
首次运行程序时,需要在配置选项卡中填写以下信息:
企业微信配置
- 企业ID(CorpID):企业微信管理后台获取的企业ID
- 应用AgentID:自建应用的AgentID(必填)
- 应用Secret:自建应用的Secret(必填)
- 机器人Webhook:用于发送通知的企业微信机器人Webhook地址(可选)
重要提示:本工具使用自建应用方式访问企业微信API,需要:
- 在企业微信管理后台创建自建应用
- 为应用配置"通讯录读权限"
- 将所有需要同步的部门添加到应用的"可见范围"
- 将服务器IP地址添加到企业微信"API接口调用许可IP"白名单
LDAP/AD域配置
- LDAP服务器:AD域控制器的地址,例如
dc.example.com或192.168.1.10 - 域名:AD域的完整域名,例如
example.com - 用户名:具有管理权限的域账户,格式:
DOMAIN\username - 密码:域账户密码
- 使用SSL:是否使用LDAPS(强烈推荐,选择"是")
- 端口:LDAP端口,LDAPS默认为636,非SSL为389
安全建议:强烈建议启用SSL(LDAPS)以确保数据传输安全
AD基础配置
- 基础DN:用户OU的基础DN,例如
OU=Users,DC=example,DC=com - 排除的用户:不需要同步的系统账户,用逗号分隔,例如
admin,administrator,guest
计划任务配置
- 每日执行时间:设置每天定时执行同步的时间(格式:HH:MM)
- 执行间隔:设置定时执行的间隔时间(分钟)
- 最大重试次数:同步失败时的最大重试次数
高级配置
可以通过编辑 config.ini 文件进行更多高级配置:
[WeChat]
CorpID = 企业微信ID
AgentID = 自建应用AgentID
CorpSecret = 自建应用Secret
[WeChatBot]
WebhookUrl = 机器人webhook地址
[LDAP]
Server = dc.example.com
Domain = example.com
Username = DOMAIN\admin
Password = your_password
UseSSL = True
Port = 636
[AD]
BaseDN = OU=Users,DC=example,DC=com
ExcludeUsers = admin,administrator,guest,krbtgt
[Account]
DefaultPassword = default password
ForceChangePassword = true
[Schedule]
Time = 03:00
Interval = 1440
MaxRetries = 3
[Sync]
IncrementalSync = true
ContinueOnError = true
BatchSize = 50
[Logging]
Level = INFO
DetailedLogging = true
KeepLogsDays = 30
使用说明
初次使用
-
配置企业微信:
- 在企业微信管理后台创建自建应用
- 获取 CorpID、AgentID 和 Secret
- 配置应用可见范围(包含需要同步的所有部门)
- 添加服务器IP到API白名单
-
配置LDAP连接:
- 使用
Test-LDAP.exe测试LDAP连接 - 确保能够成功连接到域控制器
- 使用
-
配置同步工具:
- 启动
WeCom-AD-Sync.exe - 在配置选项卡填写所有必要信息
- 点击"保存配置"
- 启动
-
测试同步:
- 使用
Test-WeCom-API.exe测试企业微信API连接 - 点击"立即同步"执行首次同步
- 观察日志输出,确认同步正常
- 使用
日常使用
- 程序启动后会自动根据配置的计划任务定时同步
- 可以随时点击"立即同步"按钮手动触发同步
- 同步过程中可以在状态页面查看进度和统计
- 支持点击"停止同步"按钮取消正在进行的同步
- 使用日志过滤功能筛选特定级别或关键词的日志
- 支持导出或复制日志以便分析
- 程序可以最小化到系统托盘,右键点击托盘图标查看菜单
查看同步结果
同步完成后会在 logs 目录生成以下文件:
ad_wecom_sync_YYYYMMDD_HHMMSS.log- 简要日志ad_wecom_sync_detailed_YYYYMMDD_HHMMSS.log- 详细日志sync_operations_YYYYMMDD_HHMMSS.csv- 操作记录(CSV格式)sync_validation_YYYYMMDD_HHMMSS.txt- 验证报告
注意事项
安全相关
- 强烈建议启用LDAPS (SSL):确保AD通信安全,防止密码泄露
- 妥善保管配置文件:
config.ini包含敏感信息,建议设置文件访问权限 - 使用强密码:为新建用户设置符合企业安全策略的强密码
- 最小权限原则:域账户仅需要OU和用户管理权限,避免使用域管理员账户
同步相关
- 首次同步时间:首次同步可能需要较长时间,尤其是组织结构复杂时
- 测试环境验证:建议先在测试环境验证配置,确认无误后再在生产环境使用
- 禁用而非删除:企业微信中删除的用户在AD中会被禁用而非删除,防止数据丢失
- 多部门用户:用户属于多个部门时,会被放置在主部门OU中,并加入所有部门对应的安全组
- 增量同步:启用增量同步后,仅处理有变化的用户,显著提升效率
维护相关
- 定期清理日志:同步过程会创建日志文件,建议定期清理旧日志
- 监控同步状态:关注企业微信机器人通知,及时发现同步异常
- IP白名单更新:服务器IP变更时,需同步更新企业微信API白名单
常见问题
Q: 提示"unsupported hash type MD4"错误?
A: 这是Python 3.9+版本的NTLM认证兼容性问题。程序已内置自动回退到SIMPLE认证,无需手动处理。
Q: 提示"错误码=60020, not allow to access from your ip"?
A: 需要将服务器IP添加到企业微信管理后台的"API接口调用许可IP"白名单中。
Q: 提示"错误码=60011, no privilege to access/modify contact/party"?
A: 自建应用缺少通讯录读权限,需要在应用配置中开启。
Q: 提示"department not found"或部门不在可见范围?
A: 需要将所有需要同步的部门添加到自建应用的"可见范围"中。
Q: LDAP连接失败?
A: 请检查:
- LDAP服务器地址是否正确(域控制器地址)
- 端口是否正确(LDAPS: 636, LDAP: 389)
- 域控制器是否启用了LDAPS服务
- 防火墙是否允许相应端口
- 域账户用户名格式是否正确(
DOMAIN\username)
Q: 同步过程中出现网络错误怎么办?
A: 程序内置了重试机制和continue-on-error功能,会自动尝试重新连接。如果持续失败,请检查网络连接和防火墙设置。
Q: 如何排除特定用户不被同步?
A: 在配置文件的 [AD] 部分的 ExcludeUsers 中添加要排除的用户名,用逗号分隔。
Q: 是否支持将AD域信息同步到企业微信?
A: 当前版本仅支持从企业微信同步到AD域,不支持反向同步。
Q: 如何修改新创建用户的默认密码?
A: 在配置文件的 [Account] 部分修改 DefaultPassword 值。
Q: 如何启用增量同步?
A: 在配置文件的 [Sync] 部分设置 IncrementalSync = true。
Q: 程序运行时没有反应或闪退?
A: 使用控制台版本 WeCom-AD-Sync-Console.exe 查看详细错误信息。
技术架构
- 界面框架:PyQt5
- LDAP库:ldap3(支持LDAPS)
- HTTP库:requests(企业微信API调用)
- 任务调度:schedule
- 打包工具:PyInstaller
更新日志
v2.0.0 (2025-10-11)
- 🚀 从PowerShell迁移到LDAPS,显著提升性能和安全性
- 🔐 支持NTLM和SIMPLE认证,自动回退机制
- 🏢 从通讯录API迁移到自建应用API
- ⚡ 批量操作优化,减少网络往返
- 📊 增量同步支持,仅处理变更用户
- 🛡️ Continue-on-error机制,提高容错能力
- 📝 自动生成操作日志(CSV)和验证报告(TXT)
- 🎯 支持优雅取消同步任务
- 🔍 配置验证和连接测试
- 📦 独立可执行文件打包
技术支持
如遇到问题,请:
- 查看详细日志文件(
logs目录) - 使用测试工具验证连接(
Test-LDAP.exe,Test-WeCom-API.exe) - 使用控制台版本查看详细错误(
WeCom-AD-Sync-Console.exe) - 联系系统管理员或技术支持
免责声明
本工具仅用于辅助企业管理,使用前请确保已经获得相关授权和权限。使用本工具导致的任何数据问题,本工具开发者不承担责任。建议在生产环境使用前,先在测试环境充分验证。
© 2025 大刘讲IT

1055

被折叠的 条评论
为什么被折叠?



