Powershell:枚举集合时发生错误:指定的目录服务属性或值不是e xist

时间:2013-11-29 10:46:32

标签: 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 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

这可能与AD权限或权限有关吗?

1 个答案:

答案 0 :(得分:1)

我可能会出现以下几个原因:

一些可能的解决方案:

  • 忽略错误,即从$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 $_ 
    }
}