Powershell:枚举集合时出错:指定的目录服务属性或值不存在

Powershell:枚举集合时出错:指定的目录服务属性或值不存在,powershell,Powershell,我一直在几个AD域中尝试以下PowerShell脚本,但在一个2008 R2域中失败,我找不到原因: PS D:\> Add-type -AssemblyName System.DirectoryServices.AccountManagement PS D:\> $ct = [System.DirectoryServices.AccountManagement.ContextType]::Domain PS D:\> $Domain = $env:USERDOMAIN PS

我一直在几个AD域中尝试以下PowerShell脚本,但在一个2008 R2域中失败,我找不到原因:

PS D:\> Add-type -AssemblyName System.DirectoryServices.AccountManagement
PS D:\> $ct = [System.DirectoryServices.AccountManagement.ContextType]::Domain
PS D:\> $Domain = $env:USERDOMAIN
PS D:\> $pc = New-Object System.DirectoryServices.AccountManagement.PrincipalContext   $ct,$Domain
PS D:\> $user = System.DirectoryServices.AccountManagement.UserPrincipal]::FindByIdentity($pc, "SamAccountName", "testuser")
PS D:\> $groups = $user.GetAuthorizationGroups()
D:\> $groups
通常,脚本会给出组列表,但对于此域,它会给出以下错误消息(在组列表之后):

枚举集合时出错:指定的目录服务属性或值不存在

CategoryInfo:InvalidOperation(System.Director...ment.Principal]:FindResultEnumerator`1) [], Runtime
Exception
FullyQualifiedErrorId : BadEnumeration

这可能与广告特权或权限有关吗?

I发生这种情况可能有以下几个原因:

  • 当组进行迭代时,它会尝试将SID解析为不存在的Active Directory对象。我会检查您的Active Directory,以确保没有丢失或损坏的广告用户/组。(类似于此错误的内容:)
  • 这也可能是由于无法解析的外部安全主体(如:)
一些可能的解决办法:

  • 忽略错误,即从
    $ErrorActionPreference=“SilentlyContinue”
  • 试着这样做:
(非常粗糙的代码作为起点)


我认为这可能是由于以下几个原因:

  • 当组进行迭代时,它会尝试将SID解析为不存在的Active Directory对象。我会检查您的Active Directory,以确保没有丢失或损坏的广告用户/组。(类似于此错误的内容:)
  • 这也可能是由于无法解析的外部安全主体(如:)
一些可能的解决办法:

  • 忽略错误,即从
    $ErrorActionPreference=“SilentlyContinue”
  • 试着这样做:
(非常粗糙的代码作为起点)


感谢您的回复,这对故障排除很有帮助。删除其中一个广告组后,脚本运行时没有任何错误消息。很高兴听到!很高兴您能够找到问题。感谢您的回复,这对故障排除很有帮助。删除其中一个广告组后,脚本运行时没有任何错误消息。很高兴听到!很高兴你能找到问题。
$searchRoot = New-Object System.DirectoryServices.DirectoryEntry
$adSearcher = New-Object System.DirectoryServices.DirectorySearcher
$adSearcher.SearchRoot = $searchRoot
$adSearcher.Filter = "(samAccountName=UserName)"
$adSearcher.PropertiesToLoad.Add("memberOf")

$samResult = $adSearcher.FindOne()

if($samResult)
{
    $adAccount = $samResult.GetDirectoryEntry()
    $groupMembership = $adAccount.Properties["memberOf"]
    $groupMembership | foreach {
        Write-Host $_ 
    }
}