跨域添加AD组成员失败求助:DomainA用户无法加入DomainB组
问题原因
你遇到的ADIdentityNotFoundException错误,核心原因是单向信任的限制:Domain A不信任Domain B,这意味着Domain B的域控制器(DC)无法主动查询Domain A的AD对象信息。虽然Domain B信任A(允许A的用户在B域认证),但B的AD默认不会跨域去A的目录里查找用户DomainA\User1,所以在B域的上下文里找不到这个对象。
解决方案
要解决这个问题,你需要让命令明确从Domain A的AD中获取用户对象,或者使用跨域唯一的用户标识符(SID)来指定成员。以下是两种可行的方法:
方法1:使用用户SID添加
SID是Active Directory中跨域唯一的身份标识,Domain B的AD可以直接识别并验证它。
先获取DomainA\User1的SID:
在能访问Domain A DC的机器上(或者当前Domain B机器如果能连通A的DC)执行:Get-ADUser -Identity User1 -Server DomainA.com -Credential DomainA\User1 | Select-Object SID复制输出的SID(比如
S-1-5-21-123456789-1234567890-1234567890-1101)。使用SID添加到Domain B的组:
确保你使用的凭据有修改GroupOnDomainB的权限(建议用Domain B本地的管理员或有权限的用户):Add-ADGroupMember -Identity GroupOnDomainB -Members S-1-5-21-123456789-1234567890-1234567890-1101 -Credential DomainB\YourAdminUser
方法2:指定Domain A的DC来解析用户对象
直接在Add-ADGroupMember命令中指定Domain A的服务器,让命令从A的AD中获取用户对象:
Add-ADGroupMember -Identity GroupOnDomainB -Members DomainA\User1 -Server DomainA.com -Credential DomainA\User1
注意:这里的
-Credential需要是Domain A中有权限读取用户信息的账号,同时执行命令的上下文需要能连通Domain A的DC。另外,确保Domain A的用户User1(或者你用的凭据账号)在Domain B中拥有修改GroupOnDomainB组的权限,否则会遇到权限错误。
后续脚本优化建议
当你编写CSV批量导入脚本时,可以在脚本中先批量获取Domain A用户的SID(或完整DN),再用这些标识去添加到Domain B的组里。这样可以避免每次添加时都跨域查询,也能解决单向信任下的对象识别问题。
内容的提问来源于stack exchange,提问作者chris

