PowerShell跨域批量移除AD用户所属组时出现ADReferralException报错
报错根因分析
两个报错都是跨域AD操作时未显式指定寻址目标、对象标识不明确导致的,具体对应原因:
A referral was returned from the server(错误ID 8235):你通过India.local的域控addc45.india.local查询到的用户所属组,不全属于India.local域——其中部分组属于Us.local或其他受信任域。调用Remove-ADGroupMember时未指定操作对应的域控,cmdlet默认连接当前上下文所在域(从报错看是Us.local)的DC执行操作,该DC发现目标组不属于自身管辖域,会返回referral响应告知客户端应去组所属域的DC操作,但AD PowerShell模块默认不会自动跟随这类引用跳转,因此触发报错。Cannot find an object with identity: 'IN100040' under: 'DC=US,DC=local':你给-member参数传入的是用户的SamAccountName(即IN100040这类短ID),当操作Us.local域的组时,cmdlet默认在Us.local域下查找该ID对应的对象,但India.local的用户属于跨域安全主体,不会在Us.local域中以同域对象的形式存在,仅用短ID无法匹配到正确的用户对象,因此触发找不到对象的报错。
*额外注意:你当前脚本只写了移除组的逻辑,实际没有执行禁用账号的操作,日志打印的"Disabled"只是文本输出,没有实际生效。
可行解决方法
修复核心逻辑:
- 遍历用户所属组时,先从组的可分辨名称(DN)解析出组所属的域名,显式给
Remove-ADGroupMember指定对应域作为操作目标,触发cmdlet自动连接对应域的DC执行操作,避免referral错误。 - 传入组成员参数时,不用短ID,改用用户的完整可分辨名称(DN),确保跨域场景下AD能准确定位到用户对象,避免找不到对象的错误。
- 补充缺失的账号禁用逻辑,匹配实际需求。
修正后的可直接使用的脚本如下:
# 导入离职用户列表 $users = Import-Csv -Path C:\Users\Desktop\DisableUsers.csv $totalcount = $users.Count Write-Host "共加载 $totalcount 个待处理账号" $currentCount = 1 Foreach ($u in $users) { # 连接India.local域控获取用户完整属性,包含所属组列表、自身DN $adUser = Get-ADUser -Server "addc45.india.local" -Identity $u.UserID -Properties MemberOf, DistinguishedName if (-not $adUser) { Write-Host "未找到用户 $($u.UserID),跳过处理" $currentCount++ continue } # 遍历移除所有所属组 foreach ($groupDN in $adUser.MemberOf) { # 从组DN解析所属域名,例:DC=india,DC=local 解析为 india.local $groupDomain = ($groupDN -split ',DC=') | Select-Object -Skip 1 | Join-String -Separator '.' try { Remove-ADGroupMember -Server $groupDomain -Identity $groupDN -Members $adUser.DistinguishedName -Confirm:$false -ErrorAction Stop } catch { Write-Warning "移除用户 $($u.UserID) 组 $groupDN 失败:$($_.Exception.Message)" } } # 禁用India.local域的目标账号 Disable-ADAccount -Server "addc45.india.local" -Identity $adUser -ErrorAction SilentlyContinue Write-Host "已处理完成 $($u.UserID),进度 $currentCount / $totalcount" $currentCount++ }
前置校验项
- 执行脚本的账号需要同时拥有两个域的对应权限:India.local域的用户账号修改权限、两个域内所有目标组的成员修改权限。
- 执行脚本的机器需要能正常解析两个域的DNS SRV记录,确保可以正常连接两个域的可用域控。
- 建议先选取1-2个测试账号执行验证,确认跨域组移除、账号禁用逻辑都正常后,再执行全量批量操作。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

