🔗 https://github.com/eggyrooch-blip/office365-tools
本 skill 依赖上面这个 Python CLI。Agent 执行前 先确认 repo 已 clone 到本地;遇到任何不确定的实现细节(CLI 子命令签名、 .env 变量名、产品 ID、Adobe 用户类型) 优先去仓库查 README.md / CLAUDE.md / docs/,不要凭本 skill 描述臆断。仓库是 single source of truth。
git clone https://github.com/eggyrooch-blip/office365-tools && cd office365-tools && pip install -r requirements.txt.env,按下方模板填写User.ReadWrite.All / LicenseAssignment.ReadWrite.All / User-PasswordProfile.ReadWrite.All 管理员同意python main.py office365 init 和 python main.py adobe init --force-default(选默认产品,例如 All Apps).env 模板(复制到 office-usertools/.env 后按实际填写)#env
# --------- Office 365(世纪互联) ---------
CLIENT_ID=your-entra-app-client-id
TENANT_ID=your-entra-tenant-id
CLIENT_SECRET=your-entra-app-secret
DEFAULT_PASSWORD=ChangeMe@2025
DEFAULT_DOMAIN=yourcorp.partner.onmschina.cn
FORCE_CHANGE_PASSWORD=true
# 通知邮件(推荐开启)
NOTIFICATION_ENABLED=true
NOTIFICATION_FROM_EMAIL=it-tools@yourcorp.com
NOTIFICATION_BCC_EMAILS=it@yourcorp.com
NOTIFICATION_EMAIL_DOMAIN=yourcorp.com
# SMTP(示例:飞书邮箱)
SMTP_HOST=smtp.feishu.cn
SMTP_PORT=465
SMTP_USERNAME=it-tools@yourcorp.com
SMTP_PASSWORD=your-smtp-password
SMTP_USE_SSL=true
# --------- Adobe UMAPI ---------
ADOBE_CLIENT_ID=your-adobe-client-id
ADOBE_CLIENT_SECRET=your-adobe-client-secret
ADOBE_ORG_ID=xxxxxxxxxxxxxxxxxxxxxxxx@AdobeOrg
ADOBE_API_BASE_URL=https://usermanagement.adobe.io/v2/usermanagement
ADOBE_DEFAULT_DOMAIN=yourcorp.com
用户说动作"给 XX 开账号" / "新建用户" / "新增用户"询问 provider 后执行"新员工开账号" / "入职开账号"同时 O365 + Adobe"给 XX 开 Office" / "加 Office"仅 O365"给 XX 开 Adobe" / "加 Adobe"仅 Adobe(默认 All Apps)"批量开户"需要列表(CSV 或粘贴),批量执行
参数必填说明identifier (LDAP)✅用户名前缀,如 zhangsan01provider✅office365 / adobe / bothdisplay_name / 姓名建议若无则从 LDAP 自动拆分product可选O365: SKU Part Number;Adobe: Profile ID 或别名 cc / ps / acrobat; Adobe 默认 All Apps****force_change_password可选O365 首次登录强制改密,默认 truecountry可选默认 CN
工作目录: /Users/kite/Documents/office-usertools(或通过 OFFICE_USERTOOLS_PATH 环境变量指定)
.env 配齐 O365 + Adobe 凭据(见下方"环境变量清单")
首次使用先跑: bash
python main.py office365 init
python main.py adobe init --force-default # 选 All Apps 作为默认
若用户只说了名字没说 provider/LDAP,用 AskUserQuestion 一次拿齐:
bash
python main.py office365 create <ldap> --display-name "<中文名>" [--product O365_BUSINESS]
--product 时用 state 里 init 设置的默认 license.env 的 SMTP 发通知邮件(含初始密码)id、 userPrincipalName、 passwordbash
python main.py adobe create <ldap>@<domain> [--product cc|ps|acrobat]
--product cc / all → All Apps--product ps → Photoshop--product acrobat → Acrobat ProaddAdobeID + add group 一次请求完成邀请与授权{"completed":1, "result":"success"}注意:
yourcorp.com 是 adobeID 路径(非 org 声明域)若 provider=both,顺序执行 O365 → Adobe。任何一侧失败都继续但最后汇总:
text
✅ Office 365: zhangsan01@yourcorp.partner.onmschina.cn (密码已邮件发送)
✅ Adobe: zhangsan01@yourcorp.com (All Apps, 邀请已发)
失败项标 ❌ 并保留错误信息,让用户决定补救。
对每一侧用 inspect 验证:
bash
python main.py office365 inspect <ldap> --json
python main.py adobe inspect <ldap>@yourcorp.com --json
给用户一份摘要:
Office 365(世纪互联)
text
CLIENT_ID=<Entra App Client ID>
TENANT_ID=<Entra Tenant ID>
CLIENT_SECRET=<Entra App Secret>
DEFAULT_PASSWORD=<初始密码>
DEFAULT_DOMAIN=<租户域,如 yourcorp.partner.onmschina.cn>
FORCE_CHANGE_PASSWORD=true
# 通知邮件(可选)
NOTIFICATION_ENABLED=true
NOTIFICATION_FROM_EMAIL=<发件邮箱>
NOTIFICATION_BCC_EMAILS=<抄送>
NOTIFICATION_EMAIL_DOMAIN=<用户收件邮箱域>
# SMTP(飞书邮箱示例)
SMTP_HOST=smtp.feishu.cn
SMTP_PORT=465
SMTP_USERNAME=<发件邮箱>
SMTP_PASSWORD=<SMTP 密码>
SMTP_USE_SSL=true
Adobe UMAPI
text
ADOBE_CLIENT_ID=<Adobe Developer Console Client ID>
ADOBE_CLIENT_SECRET=<Client Secret>
ADOBE_ORG_ID=<IMS Org ID,格式 xxx@AdobeOrg>
ADOBE_TECH_ACCOUNT_ID=<Technical Account ID,可选>
ADOBE_API_BASE_URL=https://usermanagement.adobe.io/v2/usermanagement
ADOBE_DEFAULT_DOMAIN=yourcorp.com
症状原因处理O365 Insufficient privilegesApp 权限未授予管理员同意去 Entra → API 权限 → 授予管理员同意O365 License not availablelicense 池用完购买或回收,不要硬删其他人Adobe error.group.license_quota_exceeded产品座位不够报告给用户,不要默默降级到其他产品Adobe error.domain.trust.nonexistent尝试用 federatedID 但域名未被本 org 声明改用 adobeID 类型(默认就是)Adobe 429 Retry-After >30minget_all_users 打满配额本 skill 不需要 get_all_users;若被调用了说明走错了路径