【背景】由于工作调整,用户需要从A国迁移到B国工作。
- 站在 IT角度,A、B国都是全球根域下的子域,分别为A.domain.com, B.Domain.com。两者是平级的,即使把用户保留的A域里,其实也照常使用。
- 站在HR角度,希望把用户从A迁移到B, 并保持用户当前的 IT权限不变。同时,由于全球统一采用了O记的一套HR系统,按照流程,需要在HR系统里先将A国的用户做离职,然后再在为B国创建新的用户。更麻烦的是,AD里的账号是跟HR系统自动联动的,如果在HR系统里给用户做了离职操作,对应的AD里的账号就会被禁用并做初始化处理。
【处理】
1. 让HR系统的管理员对要迁移的用户做特殊设置,确保在HR系统里做离职操作不会把AD里的账号给初始化掉。
2. HR 根据离职流程做用户离职操作
3. 记录用户当前在AD以及AzureAD里的组属性(迁移后如有漏掉,就可以对照再给加回去)
4. 在AD里创建一个专门用于迁移用户的服务账号
5. 为新建的服务账号在 A 、B 两个域里分别做Delegation 操作,允许该服务账号(比如是在A域里创建的名为 moveaccount的一个账号)可以读取A域的账号,然后在B域特定的OU上有写权限。
6. 在A域的一台电脑上,运行命令:
get-aduser <A域的用户名> | Move-ADObject -TargetPath "OU=Test,DC=B,DC=domain,DC=com" -TargetServer "<MasterDC in B.domain.com>" -server "<Master DC in A.domain.com" -Credential A\moveaccount
7. 根据抵步记录的组属性,检查并补充遗漏的AD及AAD组。
【另】过程中遇到的几个报错及处理方法
1. 最初直接用A域的域管理员账号做迁移,结果遇到 "No credentials in the security package" 的报错,查下来可能是由于域管理员账号级别太高,不能在第五步的时候再在B域里做Delegation操作了。
--- 解决:单独创建一个常规的AD用户账号用于迁移操作。
2. “一旦移动,不能将带有成员身份的对象跨域移动,这会侵犯账户组的成员身份条件。从账户组成员身份删除对象,再试一次”
--- 解决: 用户原先的账号隶属于一些本地域及全局的AD组,从里面移除后再执行迁移就可以了。通用组可以保留不动。
3. “服务器已拒绝客户端凭据”
---- 解决:这个就是因为输错用户名了,拼写正确就行。
4. “The operation cannot be performed because child objects exist.This operation canonly be performed on a leaf object”
“由于存在子对象,无法执行操作。这个操作只能在叶对象上执行”
----- 解决:在adsiedit.msc里,查到用户有下面的这个CN=ExchangeActiveSyncDevices属性。删除掉再迁移就没上面的报错了。
5. Access is denied
--- 解决:用于迁移的服务账号在源域没有读取权限,或者在目标域没有写入权限。按照上面的第五步设置好权限就行。
---EOF---