更改AD用户组成员资格

时间:2019-01-03 00:57:29

标签: powershell active-directory windows-server-2012

我有一个禁用用户的AD容器,我需要删除其所有组成员身份。尽管我知道如何通过Read-Host用户名分别删除成员资格,但是我不确定如何为特定容器的所有用户执行此操作。

我当时认为最好的方法是使用ForEach-Object在所有用户中查看命令,但是我不确定如何对特定的容器执行此操作。我要做的最后一件事是删除所有活动用户的组成员身份。

3 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,则应该这样做。我将-confirm放在此处,这样您就不会意外地吹走了您不打算去的小组成员。

$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
            }
        }
} 

答案 1 :(得分:1)

除了在我的get-aduser过滤器中指定SearchBase之外,我还有一个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
        }
    }
}

答案 2 :(得分:0)

因此,我尝试使用您的脚本示例,但是在使事情无法正常工作时遇到了问题,并且我不明白我在哪里弄乱了事情或误解了错误。我已经研究了该错误,并试图弄清“ -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”   “身份”。不支持指定的方法。在   C:\ Users \ david.gage \ Documents \ Powershell \ Scripts \ TEST-禁用的用户   Cleanup.ps1:10 char:46   + Disable-ADAccount -Identity $ User1   + ~~~~~~       + CategoryInfo:InvalidArgument:(:) [Disable-ADAccount],ParameterBindingException       + FullyQualifiedErrorId:CannotConvertArgument,Microsoft.ActiveDirectory.Management.Commands.DisableADAccount