跨域添加AD组至用户的PowerShell脚本报错求助
跨域添加AD组成员的问题解决
问题根源
报错核心原因:组所在域(YYY域)无法解析另一域(XXX域)用户的可分辨名称,且原脚本错误地将AD对象转换为字符串传递,导致Add-ADGroupMember无法识别跨域用户身份。
前提条件
两个域之间必须已建立双向信任关系,这是跨域操作AD对象的基础。
修正后的脚本
方法一:直接传递AD用户对象(推荐)
$User = Get-ADUser -Identity "testuser1" -Server testserver1 $Group = Get-ADGroup -Identity "testgroup" -Server testserver2 $logfileTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss" # 记录用户和组的完整DN到日志 Add-Content $logfile "$logfileTime :: The AD User : $($User.DistinguishedName)" Add-Content $logfile "$logfileTime :: The group : $($Group.DistinguishedName)" try { # 直接传递Get-ADUser返回的对象,PowerShell自动处理跨域身份识别 Add-ADGroupMember -Identity $Group -Members $User -Server testserver2 } catch { Add-Content $logfile "$logfileTime :: Add Member Error : $($_.Exception.Message)" }
方法二:使用用户SID添加
$User = Get-ADUser -Identity "testuser1" -Server testserver1 $Group = Get-ADGroup -Identity "testgroup" -Server testserver2 $logfileTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss" Add-Content $logfile "$logfileTime :: The AD User : $($User.DistinguishedName)" Add-Content $logfile "$logfileTime :: The group : $($Group.DistinguishedName)" try { # SID是全局唯一标识,跨域时可直接被目标域识别 Add-ADGroupMember -Identity $Group -Members $User.SID -Server testserver2 } catch { Add-Content $logfile "$logfileTime :: Add Member Error : $($_.Exception.Message)" }
关键修正点
- 避免对象转字符串:不要用双引号包裹
$User/$Group,直接传递AD对象本身,PowerShell会自动提取其全局唯一标识(如SID)。 - 明确指定目标服务器:
Add-ADGroupMember必须通过-Server参数指定组所在域的服务器,确保操作目标正确。 - 日志属性明确化:使用
$($User.DistinguishedName)直接读取属性值,避免对象默认字符串输出的不确定性。
额外检查项
- 执行脚本的账户需同时拥有:XXX域的用户读取权限、YYY域的组修改权限。
- 确认域信任关系状态正常,无中断或配置错误。
内容的提问来源于stack exchange,提问作者attack
相关产品推荐
相关产品推荐

