如何通过 Powershell 从禁用的 Active Directory 用户中删除所有组?

问题描述

我正在尝试在我们的 Active Directory 中收集所有禁用的用户,并尝试从其所有组中删除禁用的用户。主要用于清理目的。我有点卡在我的脚本上。我不知道在 Remove-ADPrincipalGroupMembership 后面放什么:

$disabled_users = Get-AdUser -SearchBase "Ou=Users,Ou=test,DC=testdomain,DC=io" -Filter
  "enabled -eq 'false'"
 foreach($person in $disabled_users) {
     Get-ADPrincipalGroupMembership $person | Remove-ADPrincipalGroupMembership #stuckhere
 }

解决方法

Get-ADPrincipalGroupMembership 仅返回组,导致 Remove-ADPrincipalGroupMembership 使用组名称自动填充 -Identity。您必须在 -Identity 中重新使用用户对象。

由于第一个问题,Remove-ADPrincipalGroupMembership 不接受来自管道的多个组。它应该正常,但 [ADGroup] 返回的 Get-ADPrincipalGroupMembership 对象似乎绊倒了它。要修复,请使用 ForEach 循环,或使用两步过程:

# two steps:
$groups = Get-ADPrincipalGroupMembership $person
Remove-ADPrincipalGroupMembership -Identity $person -MemberOf $groups -WhatIf 

# OR foreach loop:
Get-ADPrincipalGroupMembership $person | 
    Foreach { 
        Remove-ADPrincipalGroupMembership -Identity $person -MemberOf $_
    }

请注意,您无法删除 AD 用户的主要组(通常是“域用户”),因此您可能需要添加过滤器:

$groups = Get-ADPrincipalGroupMembership $person |
    Where Name -notlike 'Domain Users'
Remove-ADPrincipalGroupMembership -Identity $person -MemberOf $groups
,

使用 true 添加另一个选项:

Remove-ADGroupMember

Get-ADPrincipalGroupMembership $person | Remove-ADGroupMember -Members $person 会将用户成员资格的 Remove-ADGroupMember 作为管道值,因此您只需指定要删除的组的 成员