正如标题所说,我必须find用户所属的所有组,并从所有组中删除其成员。
我试过这个:
get-adgroup -filter * | where {(Get-ADGroupMember $_ | foreach {$_.PrimarySmtpAdress}) -contains "[email protected]"}
但它不会返回任何东西(虽然有一些项目必须返回)
至于删除,我发现没有办法做到这一点,有人可以给我一个这样的代码的例子吗?
我在谈论安全组
假设所有的反向链接都已经到位,这是一个简单的3步过程,很容易用PowerShell完成:
# 1. Retrieve the user in question: $User = Get-ADUser "username" -Properties memberOf # 2. Retrieve groups that the user is a member of $Groups = $User.memberOf |ForEach-Object { Get-ADGroup $_ } # 3. Go through the groups and remove the user $Groups |ForEach-Object { Remove-ADGroupMember -Identity $_ -Members $User }
如果您不想手动确认删除每个组的用户,请使用-Confirm:$false :
Remove-ADGroupMember -Identity $_ -Members $User -Confirm:$false
我可以补充说,你可能想logging你删除的每个组成员,只是为了方便恢复。 在删除之前,将群组的DN打印到一个文本文件中,标识有问题的用户:
$LogFilePath = "C:\BackupLocation\user_" + $User.ObjectGUID.ToString() + ".txt" Out-File $LogFilePath -InputObject $(User.memberOf) -Encoding utf8
这将把所有的组写入文件,并允许简单可靠的回滚