我首先要说的是我根本不是脚本专家。但我的任务是在几个月前创建一个脚本来删除指定OU(称为DISABLE)中所有用户的所有组成员身份。
长话短说,剧本大部分时间都很有效,但在随机的情况下,它不会为用户删除1(随机)组,或2,有时甚至更多,我不能找出原因是什么。使用的脚本是:
#Remove User Group Memberships
$ou = Get-ADUser -SearchBase "OU=DISABLE,OU=CE,DC=ourdomain,DC=org" -Filter *
foreach ($user in $ou) {
$UserDN = $user.DistinguishedName
$user.PrimaryGroupID = 513
set-aduser -instance $user
Get-ADGroup -LDAPFilter "(member=$UserDN)" | foreach-object {
if ($_.name -ne "Domain Users") {remove-adgroupmember -identity $_.name -
member $UserDN -Confirm:$False} }
}
非常感谢您提供的任何帮助,谢谢!
答案 0 :(得分:0)
不是搜索用户,而是搜索用户所属的所有组,而只是在第一次搜索中包含该用户。这样可以减少AD搜索次数,减少AD搜索错过用户的可能性。
#Remove User Group Memberships
$ou = Get-ADUser -SearchBase "OU=DISABLE,OU=CE,DC=ourdomain,DC=org" -Filter * -Property MemberOf
foreach ($user in $ou) {
$UserDN = $user.DistinguishedName
$user.PrimaryGroupID = 513
set-aduser -instance $user
$user.MemberOf |
Where{$_ -notmatch "Domain.?Users"} |
ForEach {remove-adgroupmember -identity $_ -member $UserDN -Confirm:$False}
}
尝试一下,看看你是否能获得更好的里程数。另外,请考虑其中一些可能是受保护的组,并且您运行该脚本的帐户不具有影响这些组的权限。检查这些未被从组中删除的用户,看他们是否将AdminCount
属性设置为1。