查找孤立的外部安全主体并将其从组中删除

查找孤立的外部安全主体并将其从组中删除

我们有一个具有多个传出信任的 Windows 2008 R2 域。在此域中,我们将受信任域中的用户添加到域本地安全组。似乎部分或所有已从外部域中删除的帐户在删除后仍保留在组中(从原始域中删除),从而在组中留下一个无法解析的 SID。

找到此类帐户并将其从群组中删除的最简单方法是什么?

答案1

我手边没有脚本。但我个人会做这样的事。

  1. 枚举 cn=foreignsecurityprincipals,dc=doamin,dc=com 容器中的对象来构建 FPO SID 列表
  2. 使用批处理文件迭代每个文件并针对 SID 执行 psgetsid.exe(sysinternals)以查看它是否可以解析。0 表示可以解析,-1 表示不可用,甚至可能无法联系正确的 DC
  3. 如果 %errorlevel% 为 -1,则将该“坏”SID 写入另一个文件

您可以查看报告为 -1 的 SID,看看是否真的要删除所代表的 FPO。删除 FPO 将清除其使用的任何成员资格。如果需要,您可以使用 DSRM 编写脚本,稍后使用 for 循环迭代 txt 文件删除 FPO。

答案2

这是一个 powershell 脚本,用于删除无法解析名称的孤立 ForeignSecurityPrincipal(这通常意味着原始对象不再存在)。

但首先要确保,如果无法解析 ForeignSecurityPrincipal 的名称,则它与其他域的通信问题无关。

如果您确定要删除所有这些主体,只需从 Catch 部分删除“-WhatIf”参数,否则它只会进行模拟。

$objForeignSecurityPrincipalList=Get-ADObject -Filter {ObjectClass -eq 'foreignSecurityPrincipal'}

foreach($objFSP in $objForeignSecurityPrincipalList)
{
    Try
    {
        $null=(New-Object System.Security.Principal.SecurityIdentifier($objFSP.objectSid)).Translate([System.Security.Principal.NTAccount])
    }
    Catch
    {
        Remove-ADObject -Identity $objFSP -WhatIf
    }
}

相关内容