Go to file
Marsway e4d0dee311 init 2026-02-24 17:00:27 +08:00
ad_user_creator init 2026-02-24 17:00:27 +08:00
build init 2026-02-24 17:00:27 +08:00
config init 2026-02-24 17:00:27 +08:00
dist init 2026-02-24 17:00:27 +08:00
state init 2026-02-24 17:00:27 +08:00
README.md init 2026-02-24 17:00:27 +08:00
requirements.txt init 2026-02-24 17:00:27 +08:00
run.sh init 2026-02-24 17:00:27 +08:00
users.csv init 2026-02-24 17:00:27 +08:00

README.md

AD User Creator

用于 AD 用户自动化创建的 Python 脚本集支持交互式与批量模式CSV/XLSX并提供菜单式单入口程序。

Python 环境

  • 解释器:/opt/homebrew/Caskroom/miniconda/base/bin/python

安装依赖

/opt/homebrew/Caskroom/miniconda/base/bin/python -m pip install -r requirements.txt

配置

  1. 修改 config/config.yaml(所有配置均在此文件中维护)。

配置优先级:命令行参数(如 --config> config.yaml

关键字段:

  • ldap.people_base_dn: 例如 OU=People,DC=example,DC=com
  • ldap.groups_base_dn: 例如 OU=linux,OU=Groups,DC=example,DC=com
  • defaults.initial_uid_number: 默认为 2106
  • defaults.initial_password: 默认初始密码 "1234.com"
  • paths.uid_state_file: uidNumber 持久化文件
  • paths.group_gid_map_file: 组与 gidNumber 映射文件(默认 staff: 3000
  • behavior.require_ldaps_for_password: 密码设置要求 LDAPS建议保持 true

初始化状态文件

/opt/homebrew/Caskroom/miniconda/base/bin/python -m ad_user_creator.main init-state

菜单式入口(推荐)

新增菜单入口:

/opt/homebrew/Caskroom/miniconda/base/bin/python -m ad_user_creator.entry

启动后会先选择模式:

  • 1 交互式创建
  • 2 批量导入
  • 3 修改配置文件路径
  • q 退出

交互式创建(命令行直达)

/opt/homebrew/Caskroom/miniconda/base/bin/python -m ad_user_creator.main interactive --config config/config.yaml

或直接运行根目录脚本(默认交互式):

./run.sh

dry-run

/opt/homebrew/Caskroom/miniconda/base/bin/python -m ad_user_creator.main interactive --dry-run

批量创建(正式支持 CSV/XLSX

CSV:

/opt/homebrew/Caskroom/miniconda/base/bin/python -m ad_user_creator.main batch --input users.csv --continue-on-error true
./run.sh -f users.csv

XLSX:

/opt/homebrew/Caskroom/miniconda/base/bin/python -m ad_user_creator.main batch --input users.xlsx --continue-on-error true
./run.sh -f users.xlsx

dry-run 示例:

./run.sh -f users.xlsx --dry-run

仅支持 .csv.xlsx

输入表头格式

必须包含以下列:

  • 姓名
  • 用户名
  • 邮箱
  • 部门 OU
  • 基础组
  • 项目组
  • 资源组

示例:

姓名,用户名,邮箱,部门 OU,基础组,项目组,资源组
杨滨,yangbin,tony.yang@aflowx.com,CEO,staff,,
孙彤,sunt,sun.tong@aflowx.com,CTO,staff,,
矫渊培,jiaoyp,jiao.yp@aflowx.com,RnD/tm_hardware,staff,"prj_r3xx_hw,prj_demo",

规则:

  • 部门 OU=CEO -> 用户 DN 路径包含 OU=CEO,<people_base_dn>
  • 部门 OU=RnD/tm_hardware -> 用户 DN 路径包含 OU=tm_hardware,OU=RnD,<people_base_dn>
  • 项目组资源组 支持逗号分隔,可空

Linux 属性映射

创建用户时会写入:

  • uid = sAMAccountName
  • uidNumber = state/uid_state.json 自增分配(起始 2106
  • unixHomeDirectory = /home/<sAMAccountName>
  • gidNumber = 基础组 gidNumber(来自 state/group_gid_map.yaml
  • mail = 邮箱

账号启用与初始密码

用户创建流程为:

  1. 先以禁用状态创建用户(userAccountControl=514
  2. 设置初始密码(默认 "1234.com"
  3. 启用用户(userAccountControl=512
  4. 添加基础组与可选组

输出与日志

  • 批量结果:state/last_batch_result.csv
  • 运行日志:state/run.log
  • 批量状态:
    • CREATED:新建用户成功
    • UPDATED:已存在用户,属性或组关系发生更新
    • SKIPPED_NO_CHANGE:已存在用户且无任何变化
    • FAILED:处理失败

常见问题

  • LDAP 连接失败:检查 host/port/use_ssl/bind_dn/bind_password
  • 基础组缺失或未映射 gid检查 AD 组是否存在,以及 state/group_gid_map.yaml
  • 文件格式报错:确认输入文件后缀是 .csv.xlsx
  • WILL_NOT_PERFORM:通常是未使用 LDAPS、密码策略不满足、或权限不足

打包为单文件二进制

安装 PyInstaller

/opt/homebrew/Caskroom/miniconda/base/bin/python -m pip install pyinstaller

使用 spec 构建:

pyinstaller build/ad_user_creator.spec

构建完成后,可执行文件位于:

  • dist/ad-user-creator

运行后将先显示菜单供选择模式。