Изменение членства в группах пользователей AD - PullRequest
0 голосов
/ 03 января 2019

У меня есть контейнер AD для отключенных пользователей, который мне нужен, чтобы удалить все их членство в группах.Хотя я знаю, как удалить членство на индивидуальной основе с помощью Read-Host имени пользователя, я не уверен, как это сделать для всех пользователей определенного контейнера.

Я думал, что лучший способсделать это будет использовать ForEach-Object для просмотра команды через всех пользователей, но я не уверен, как сделать это действие для конкретного контейнера.Последнее, что я хочу сделать, это удалить членство в группах для всех моих активных пользователей.

Ответы [ 3 ]

0 голосов
/ 03 января 2019

В дополнение к указанию SearchBase в моем фильтре get-aduser у меня есть фильтр LDAP, который находит только отключенные учетные записи (мы программно отключаем учетные записи, поэтому для всех отключенных учетных записей существует единственное значение userAccountControl), как я иногда видел администраторы (ошибочно) прячут активного пользователя в нашей специализированной OU отключенного пользователя.

Фильтр также ограничивает результаты для отключенных пользователей, которые являются членами некоторой группы, чтобы избежать повторной обработки людей в каждом цикле обработки пакета. Это позволяет мне иметь другую безопасность - пакет удаляет членство в группах только в том случае, если найдено «разумное» количество новых отключенных учетных записей, и отправляет мне оповещение по электронной почте, если в поиске возвращается слишком много пользователей. То, что является «разумным», зависит от того, сколько людей становятся инвалидами в период между запусками. Когда мы делаем большое увольнение, мне нужно войти и вручную набрать номер, чтобы очистить пару сотен учетных записей ... но это спасло нас, когда бастующие рабочие стали инвалидами (они не должны были входить в систему, но нет один хотел стереть все членство в группе).

После того, как вы получили отключенных пользователей, переберите их значения memberOf, чтобы удалить группы.

$objDisabledUsers=Get-ADUser -SearchBase "OU=DisabledUsers,DC=example,DC=com" -LDAPFilter "(&(userAccountControl=514)(memberOf=*)(objectCategory=person))" -Properties name, sAMAccountName, memberOf

if($objDisabledUsers.Count -lt 10){
    foreach($objUser in $objDisabledUsers){
        $objGroupMemberships = $objUser.memberOf
        foreach($strGroup in $objGroupMemberships){
            write-host "Removing $objUser from $strGroup"
            Remove-ADGroupMember -Identity $strGroup -Members $objUser.SamAccountName -Confirm:$false
        }
    }
}
0 голосов
/ 08 января 2019

Итак, я попытался использовать ваш пример сценария, но у меня возникли проблемы с тем, как что-то работает, и я не понимаю, где я что-то напутал или неправильно понял ошибку.Я исследовал ошибку и попытался разобраться в параметре "-Identity", но что-то ускользает от меня.

# Variables
$User1=Get-ADUser -SearchBase 'OU=Employees DISABLED,DC=domain,DC=com' -Filter *
$groups=Get-ADGroup "Disabled Users"

foreach($group in $groups){
    $check=Get-ADGroupMember -Identity $group.Name
        foreach($user in $User1){
            if ($check.name -contains $user.name){
                # Disables named users ActiveDirectory Account.
                 Disable-ADAccount -Identity $User1

                # Adds AD group "Disabled Users" to named user group membership
                Add-ADGroupMember -Identity 'Disabled Users' -Member $User1
            }
        }
} 

Однако, это сообщение об ошибке, которое я получаю:

Disable-ADAccount: не удалось преобразовать System.Object [] в тип «Microsoft.ActiveDirectory.Management.ADAccount», требуемый параметром «Identity».Указанный метод не поддерживается.В C: \ Users \ david.gage \ Documents \ Powershell \ Scripts \ TEST - Очистка отключенного пользователя .ps1: 10 символов: 46 + Disable-ADAccount -Identity $ User1 + ~~~~~~ + CategoryInfo: InvalidArgument: (:) [Disable-ADAccount], ParameterBindingException + FullyQualifiedErrorId: CannotConvertArgument, Microsoft.ActiveDirectory.Management.Commands.DisableADAccount

0 голосов
/ 03 января 2019

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

$users=Get-ADUser -SearchBase "OU=Test,DC=domain,DC=com" -Filter *
$groups=Get-ADGroup -Filter *


foreach($group in $groups){
    $check=Get-ADGroupMember -Identity $group.Name
        foreach($user in $users){
            if ($check.name -contains $user.name){
                Remove-ADGroupMember -Identity $group.Name -Members $user.SamAccountName -Confirm
            }
        }
} 
...