Не могу понять, почему с ошибкой валится скрипт?



@dshumov

Коллеги, есть скрипт — удаляющий все группы у заблокированных пользователей, кроме «Domain Users»:
$Token = (Get-ADGroup "Domain Users" -Properties PrimaryGroupToken).PrimaryGroupToken

Get-ADUser -Filter 'Enabled -eq "False"' -SearchBase "DC=domen,DC=local" -Properties PrimaryGroup,MemberOf | ForEach-Object {

#If User Primary Group is not Domain Users, then Set Domain User as Primary Group.
If ($_.PrimaryGroup -notmatch "Domain Users"){ 
             Set-aduser -Identity $_ -Replace @{PrimaryGroupID = $Token } -Verbose
                                               } #If

#If User is a member of more than 1 Group. Remove All Group except Domain Users.
If ($_.memberof) {
            $Group = Get-ADPrincipalGroupMembership -Identity $_ | Where-Object {$_.Name -ne 'Domain Users'}
                     Remove-ADPrincipalGroupMembership -Identity $_ -MemberOf $Group -Confirm:$false -Verbose
                  } #If

}

На небольшом количестве пользователей, отрабатывает хорошо. Но стоит натравить на весь домен, поработав немного, вываливается с ошибкой:

Get-ADUser : The server has returned the following error: invalid enumeration context.
At C:ScriptsОчистка ADremove Disabled Users from All AD Groups.ps1:3 char:1
+ Get-ADUser -Filter 'Enabled -eq "False"' -SearchBase "OU=Filials,DC=nasta,DC=loc ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Get-ADUser], ADException
    + FullyQualifiedErrorId : ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.GetADUser

Не могу понять, почему…. 🙁


Решения вопроса 1



@azarij

есть мнение, что если засунуть вывод первой команды в переменную и от переменной уже танцевать дальше, то прокатит:
$users = Get-ADUser -Filter 'Enabled -eq "False"' -SearchBase "DC=domen,DC=local" -Properties PrimaryGroup,MemberOf

$users | ForEach-Object {

#If User Primary Group is not Domain Users, then Set Domain User as Primary Group.
If ($_.PrimaryGroup -notmatch "Domain Users"){ 
             Set-aduser -Identity $_ -Replace @{PrimaryGroupID = $Token } -Verbose
                                               } #If

#If User is a member of more than 1 Group. Remove All Group except Domain Users.
If ($_.memberof) {
            $Group = Get-ADPrincipalGroupMembership -Identity $_ | Where-Object {$_.Name -ne 'Domain Users'}
                     Remove-ADPrincipalGroupMembership -Identity $_ -MemberOf $Group -Confirm:$false -Verbose
                  } #If

}

либо нужно менять какую-то опцию в АД вебсервисе, чего микрософт не рекомендует делать.

Комментировать

Ответы на вопрос 1



@dshumov Автор вопроса

azarij Дружище, ты спас меня! Огромное спасибо. Судя по всему прокатило уже за 500 перевалило и не стопнулось…….

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *