[TFS 2015]:跨AD域迁移TFS用户并保留权限方案咨询
我之前处理过好几次类似的TFS跨域用户迁移场景,结合官方的Identities命令工具,给你梳理下最稳妥的步骤,确保权限完全保留,不用重新配置一堆东西:
准备工作
- 先整理好迁移用户清单:把每个
domainA\firstname.lastname对应的domainB\employee#列出来,最好做成CSV格式(比如每行是旧身份,新身份),批量处理的时候能省不少事。 - 确保你有TFS服务器管理员权限(得在Team Foundation Administrators组里),并且能访问TFS的命令行工具——一般在
C:\Program Files\Microsoft Team Foundation Server <你的版本号>\Tools目录下,找不到的话可以搜tfssecurity.exe。 - 提前备份TFS的配置数据库和集合数据库!这步一定要做,万一操作中出点小状况,备份就是你的救命稻草。
迁移执行步骤
1. 先验证新旧身份能被TFS识别
操作前先确认TFS能找到新旧用户,避免后续踩坑。可先暂停TFS服务(防止操作期间有用户变更):tfsservicecontrol quiesce
然后分别查询新旧身份:tfssecurity /imx domainA\firstname.lastname /server:http://<你的TFS服务器地址>:8080/tfstfssecurity /imx domainB\employee# /server:http://<你的TFS服务器地址>:8080/tfs
如果能返回用户的SID、姓名这些属性,说明身份是有效的,可以继续下一步。
2. 批量映射(多用户推荐)
如果要迁移的用户多,用CSV批量映射效率最高。先建个user_mapping.csv文件,内容示例:
domainA\john.doe,domainB\1001 domainA\jane.smith,domainB\1002
然后运行命令:tfssecurity /mapidentity /server:http://<你的TFS服务器地址>:8080/tfs /inputfile:user_mapping.csv
这个命令会自动把旧身份的所有权限、工作项历史、变更集关联全部转移到新身份上,不用一个个手动弄。
3. 单个用户映射(少数用户用)
如果只有几个用户要迁移,直接跑单个命令就行:tfssecurity /mapidentity "domainA\firstname.lastname" "domainB\employee#" /server:http://<你的TFS服务器地址>:8080/tfs
执行后会提示确认,输入Y回车就搞定了。
4. 验证迁移结果
映射完一定要检查下,确保没出问题:
运行命令查看新身份的映射情况:tfssecurity /imx domainB\employee# /server:http://<你的TFS服务器地址>:8080/tfs
看输出里的Mapped identities部分,应该能看到对应的旧domainA用户。另外,去TFS项目的权限设置里看看,或者打开一个旧工作项,确认新用户已经有了旧用户的权限,历史记录里的用户显示也正常。
5. 恢复TFS服务(如果之前暂停了)
tfsservicecontrol unquiesce
关键注意事项
- 千万别手动删除旧的domainA用户!映射后TFS会自动关联新旧身份,删了旧用户反而可能导致权限丢失。
- 如果用户在TFS里有自定义组,映射后新身份会自动加入对应的组,不用手动调整组权限。
- 迁移完成后,用户直接用新的
domainB\employee#登录TFS就行,之前的所有操作历史、权限都会保留,完全无缝。 - 这个方法适用于TFS 2018及以后版本,更早版本的话核心逻辑一样,但可能需要额外验证数据库层面的关联,不过一般问题不大。
内容的提问来源于stack exchange,提问作者SRX

