Get-ADGroupMember 将域本地组的错误返回到来自远程林的成员

本文有助于修复在组具有来自远程林的成员的情况下运行 Get-ADGroupMember cmdlet 时发生的错误。

原始 KB 编号: 3171600

现象

假设你使用 Get-ADGroupMember cmdlet 标识Active Directory 域服务(AD DS)中的组成员。 但是,为域本地组运行 cmdlet 时,将返回以下错误:

Get-ADGroupMember -verbose -identity “CN=Test-Local1,OU=Test Accounts,DC=contoso,DC=com”
Get-ADGroupMember:发生未指定的错误
位置:line:1 char:1
+ Get-ADGroupMember -verbose -identity “CN=Test-Local1,OU=Test Accounts,DC=contoso ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (CN=Test-Local1,...bertm-w7,DC=com:ADGroup) [Get-ADGroupMember], ADExceptionon + FullyQualifiedErrorId : ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.GetADGroupMember

备注

在单向信任中,当从信任林对组使用 Get-ADGroupMember cmdlet 时,如果组包含受信任林的成员,则会收到以下错误:

  • “发生了未指定的错误”
  • “由于内部错误,服务器无法处理请求”

解决方法是,使用Active Directory 用户和计算机管理单元查看组的成员,或将单向信任转换为双向信任。

原因

如果组具有已从帐户林中删除其帐户的另一个林的成员,则会出现此问题。 该成员由外部安全主体(FSP)在本地域中表示。 在组的 LDIFDE 导出中,成员身份如下所示:

dn: CN=Test-Local1,OU=Test Accounts,DC=contoso,DC=com

成员:

CN=S-1-5-21-3110691720-3620623707-1182478234-698540,CN=ForeignSecurityPrincipals,DC=contoso,DC=com

成员:

CN=S-1-5-21-3110691720-3620623707-1182478234-695739,CN=ForeignSecurityPrincipals,DC=contoso,DC=com

删除具有 SID 的源帐户时,FSP 不会更新或删除以反映此删除。 必须手动验证是否删除了这些 FSP 引用。

解决方法

若要解决此问题,请为涉及这些 SID 以及 Active Directory Webservice 执行的解决请求启用日志记录。 这样,便可以识别无法解决的帐户。 为此,请在 Get-ADGroupMember 域控制器 contoso.com 上运行 cmdlet(占位符表示有问题的域)。

若要启用日志记录,请运行以下命令行:

PowerShell
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name LspDbgInfoLevel -Value 0x800 -Type dword -Force
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name LspDbgTraceOptions -Value 0x1 -Type dword -Force

请记住在拥有日志时关闭日志记录:

PowerShell
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name LspDbgInfoLevel -Value 0x0 -Type dword -Force

你将看到一个名为 c:\windows\debug\lsp.log 的文件,该文件跟踪 SID-Name 解析尝试。 在执行 cmdlet 的域控制器上重新运行 cmdlet 时,该文件将记录失败,如下所示:

LspDsLookup - 输入函数 LsapLookupSidsLspDsLookup - LookupSids request for 1 SIDs level=1, mappedcount=0, options=0x0, clientRevision=2 正在处理。 SID 为;LspDsLookup - Sids[ 0 ] = S-1-5-21-3110691720-3620623707-1182478234-698540LspDsLookup - 请求程序详细信息:本地计算机,进程 ID = 1408, 进程名称 = C:\Windows\ADWS\Microsoft.ActiveDirectory.WebServices.exe LspDsLookup - 输入函数 LsapDbLookupSidsUsingIdentityCacheLspDsLookup - 1 sids 保持未映射的LspDsLookup - 退出函数 LsapDbLookupSidsUsingIdentityCache,状态为 0x0LspDsLookup - LookupSids 链请求(使用 Netlogon) 到 \dc3.northwindtraders.com for 1 sids 的创建方式为 level=6,mappedcount=0,options=0x0,serverRevision=0。 Sids 为;LspDsLookup - Sids[ 0 ] = S-1-5-21-3110691720-3620623707-1182478234-698540 LspDsLookup - 查找请求(使用 Netlogon) \dc3.northwindtraders.com 使用 0xc0000073 和 mappedcount=0 返回, serverRevision=0LspDsLookup - Exiting function LsapLookupSids with status 0xc0000073

检查以下项目,验证是否是此问题的相关部分(在前面的示例输出中):

  • 此过程为 C:\Windows\ADWS\Microsoft.ActiveDirectory.WebServices.exe。
  • 请求将发送到其他林中的域控制器, northwindtraders.com例如。
  • 返回代码0xc0000073,等于STATUS_NONE_MAPPED。

若要查找 FSP 对象,请运行以下命令(替换域名和 SID):

PowerShell
get-AdObject -Searchbase "CN=ForeignSecurityPrincipals,DC=contoso,DC=com" -ldapfilter "(cn=S-1-5-21-3110691720-3620623707-1182478234-698540)"

此 FSP 的原始对象不再存在,因此可以安全地将其删除。 执行此操作还会将其从其所属的所有组中删除:

PowerShell
get-AdObject -Searchbase "CN=ForeignSecurityPrincipals,DC=contoso,DC=com" -ldapfilter "(cn=S-1-5-21-3110691720-3620623707-1182478234-698540)" | Remove-AdObject -Confirm:$false

参考

如何在 Windows 中映射 SID 和帐户名称