You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell:通过SID移除AD组中所有ForeignSecurityPrincipals

解决AD组中无法移除ForeignSecurityPrincipals的问题

当Remove-ADGroupMember无法移除ForeignSecurityPrincipal(该命令不支持这类对象),且旧域已不存在、公司禁止使用外部模块时,以下两种原生方法可解决问题:

方法1:用Set-ADGroup替换成员列表

ForeignSecurityPrincipal通过SID标识,我们可以过滤掉目标SID后直接更新组的成员属性:

  1. 获取目标组并读取成员属性:
    $group = Get-ADGroup -Identity "你的组名" -Properties Member

  2. 先备份当前成员(防止误删):
    $group.Member | Out-File "C:\temp\GroupMembersBackup.txt"

  3. 过滤掉旧域的ForeignSecurityPrincipal(替换为你的旧域SID前缀):
    $newMembers = $group.Member | Where-Object { $_ -notlike "CN=S-1-5-21-旧域SID前缀*,CN=ForeignSecurityPrincipals,DC=你的域,DC=com" }

  4. 更新组的成员:
    Set-ADGroup -Identity $group -Replace @{ Member = $newMembers }

方法2:用ADSI直接操作组对象

ADSI是Windows原生目录服务接口,无需额外模块,适合精准移除单个或批量ForeignSecurityPrincipal:

移除单个对象

  1. 获取组的ADSI实例:
    $groupADSI = [ADSI]"LDAP://CN=你的组名,OU=组所在OU,DC=你的域,DC=com"

  2. 定位要移除的ForeignSecurityPrincipal(使用完整SID):
    $fspSID = "S-1-5-21-xxxxxx-xxxxxx-xxxxxx-xxxx"
    $fspADSI = [ADSI]"LDAP://CN=$fspSID,CN=ForeignSecurityPrincipals,DC=你的域,DC=com"`

  3. 执行移除:
    $groupADSI.Remove($fspADSI.Path)

批量移除旧域所有ForeignSecurityPrincipal

$groupADSI = [ADSI]"LDAP://CN=你的组名,OU=组所在OU,DC=你的域,DC=com"
$oldDomainSIDPrefix = "S-1-5-21-xxxxxx-xxxxxx-xxxxxx" # 替换为旧域的SID前缀

foreach ($member in $groupADSI.Member) {
    if ($member -match "CN=$oldDomainSIDPrefix-\d+,CN=ForeignSecurityPrincipals,") {
        $groupADSI.Remove("LDAP://$member")
        Write-Host "已移除: $member"
    }
}

注意事项

  • 操作前必须备份成员列表,避免误删合法成员。
  • 执行操作需要拥有目标AD组的修改成员权限。
  • 批量操作建议先测试单个对象,确认逻辑正确后再全量执行。

内容的提问来源于stack exchange,提问作者Joachim Otahal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 09:31:34