我们有一个具有多个传出信任的 Windows 2008 R2 域。在此域中,我们将受信任域中的用户添加到域本地安全组。似乎部分或所有已从外部域中删除的帐户在删除后仍保留在组中(从原始域中删除),从而在组中留下一个无法解析的 SID。
找到此类帐户并将其从群组中删除的最简单方法是什么?
答案1
我手边没有脚本。但我个人会做这样的事。
- 枚举 cn=foreignsecurityprincipals,dc=doamin,dc=com 容器中的对象来构建 FPO SID 列表
- 使用批处理文件迭代每个文件并针对 SID 执行 psgetsid.exe(sysinternals)以查看它是否可以解析。0 表示可以解析,-1 表示不可用,甚至可能无法联系正确的 DC
- 如果 %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
}
}