2015-08-27 2 views
0

Привет, я работаю с группой Active Directory и пользователями, и я хочу проверить и установить надлежащих пользователей/групп из AD на машины. Проблема заключается в том, когда я перебираю локальные пользователи/группы на какой-либо машине, и есть старые пользователи/группы, которых больше нет в AD POWERSHELL перестанет работать и будет генерировать исключение.POWERSHELL - SID участника не может быть разрешен

Произошла ошибка (1332) при перечислении членства в группе. SID участника не может быть разрешен.

Я знаю, что вызывает эту проблему, но я не знаю, как ее обойти. Основная проблема здесь заключается в том, что ее даже невозможно выполнить итерацию по всему массиву пользователей, если она уже недействительна. Только для этого можно вручную удалить этих недопустимых пользователей.

Я даже видел некоторые сообщения Microsoft о том, что это неправильное поведение и должно быть исправлено, но ничего не было сделано по этому поводу.

Кто-нибудь здесь столкнулся с этой проблемой?

Благодарим за помощь.

$ctype = [System.DirectoryServices.AccountManagement.ContextType]::Machine 
$computer = "PC name" 
$groupName = "Administrators" 
$context = New-Object -TypeName System.DirectoryServices.AccountManagement.PrincipalContext -ArgumentList $ctype, $computer 
$idtype = [System.DirectoryServices.AccountManagement.IdentityType]::SamAccountName 
$groupData = [System.DirectoryServices.AccountManagement.GroupPrincipal]::FindByIdentity($context, $idtype, $groupName) 
$groupData.Members | select @{N='Server'; E={$computer}}, @{N='Domain'; E={$_.Context.Name}},@{N='Group'; E={$groupName}} , @{N='Account Name/Group'; E={$_.SamAccountName}}        

Вот пример кода, который им используется для итерации по локальным пользователям/группам на каком-то ПК.

+0

Есть ли конкретная причина для использования directoryservices.accountmanagement вместо использования стандартных AD-командлетов, таких как get-aduser, get-adgroupmember и т. Д.? Вы могли бы сократить опубликованный фрагмент кода до 1 или 2 (читаемых) строк с помощью командлетов на родном языке. – bluuf

+0

Хорошо с теми командами, которые вы указали, вы получите пользователей, указанных в AD. Мой код регистрируется на компьютере и получает пользователей и группы, которые установлены на компьютере. Это не то же самое. – Mitre

+0

https://connect.microsoft.com/PowerShell/feedback/details/763667/get-local-group-member-an-error-1332-occurred-while-enumerating-the-group-membership это ошибка, которую я говорю около. – Mitre

ответ

0

Можете ли вы опубликовать код, который вы используете, и полную ошибку. Я предполагаю, что есть обходной путь, но, не видя своего кода, я не вижу, что может быть неправильным. Если будет прервана завершающая ошибка, это прекратит выполнение сценария или функции (с некоторыми ошибками и исключениями), существует много способов работы вокруг этого

Также вы можете отправить полную ошибку.

Возможно, вам нужно будет отключить функцию $ erroractionpreference. А затем просмотрите переменную $ error, чтобы проверить ошибки, но снова я только размышляю.

+0

Ну причина, почему я размещаю это здесь, потому что я пробовал все, что я думаю, как 4-5 способов Try, Catching, Silentlycontinue ETC. все, что ошибка по-прежнему пробивает и разрушает скрипт. – Mitre

+0

Похоже, вы были на правильном пути. Является ли это родным командлетом PowerShell, который вы используете? Различные ошибки для разных типов команд ведут себя по-разному в powershell. Посмотрите на большую книгу по обработке ошибок PowerShell на powershelgl.org. К сожалению, не видя кода, я не могу вам помочь. Я понимаю, что вы не сможете опубликовать полный код, но даже некорректная версия, охватывающая ключевую логику, в которой возникает ошибка, была бы полезна. Cheers –

+0

Жестокий пост завтра, когда им на работу. – Mitre

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