问题描述
我正在尝试在我们的 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
作为管道值,因此您只需指定要删除的组的 成员。