2013-11-29 5 views
1

Я пробовал следующий сценарий PowerShell в нескольких доменах AD, но в одном домене 2008 R2 он терпит неудачу, и я не могу найти причина этого:Powershell: произошла ошибка при перечислении через коллекцию: указанный атрибут или значение службы каталогов не e xist

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

я это может произойти в течение нескольких возможных причин:

  • Хотя группы итерацию, он пытается разрешить SID к объекту Active Directory, который не существует. Я проверил бы ваш Active Directory, чтобы убедиться, что нет или нет пользователей или групп AD. (Что-то вроде этой ошибки: Microsoft Connect - Calling Principal GetAuthorizationGroups Error)
  • Это также может быть из-за принципала иностранных безопасности, которые не могут получить решение (как это: Foreign Security Groups in Active Directory)

Некоторые возможные решения:

  • игнор ошибки, то есть начать с $ErrorActionPreference = "SilentlyContinue"
  • попробовать что-то вроде этого:

(Ve ry в качестве отправной точки)

$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 $_ 
    } 
} 
+0

Благодарим за отзыв, это было полезно при устранении неполадок. После удаления одной из групп AD скрипт запускается без сообщений об ошибках. – crontab

+0

Замечательно! Рад, что вы смогли найти проблему. – HAL9256

Смежные вопросы