我有一个禁用用户的AD容器,我需要删除其所有组成员身份。尽管我知道如何通过Read-Host
用户名分别删除成员资格,但是我不确定如何为特定容器的所有用户执行此操作。
我当时认为最好的方法是使用ForEach-Object
在所有用户中查看命令,但是我不确定如何对特定的容器执行此操作。我要做的最后一件事是删除所有活动用户的组成员身份。
答案 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