Active Directory内务pipe理 – 从禁用用户中删除组

我正在努力find一个体面的方式来做到这一点。 出于某种原因(不重要,就是这样),我们有相当多的用户被禁用,但仍然是所有禁用前组的成员。 这导致了一些问题,如分发列表失败,列举ACL的困难等。

有谁知道一个简单的方法来批量删除用户被禁用的组? 为了方便起见,现在它们都存在于一个容器中,所以如果它能够在容器级别上完成的话,那就很有用了。 另外,我知道我们可以删除这些账户,但是对于审计和与我们的人力资源系统的交叉连接,这是不可能的。

这个示例batch file将完成你所要求的。 您需要编辑dsquery命令以使用您的特定StartNode OU – OU=SomeOU,DC=example,DC=com位:

 @ECHO OFF REM Get list of disabled users in the domain FOR /F "usebackq delims=;" %%A IN (`dsquery user "OU=SomeOU,DC=example,DC=com" -disabled -limit 0`) DO ( echo User: %%A REM Enumerate user's group memberOf, exclude "Domain Users" group FOR /F "usebackq delims=;" %%B IN (`dsget user %%A -memberof ^| find /V "Domain Users"`) DO ( ECHO Group: %%B REM Remove user %%A from Group %%B dsmod group %%B -rmmbr %%A ) ) 

使用Powershell和这里提供的Quest AD cmdlet,下面的PowerShell脚本应该可以做到这一点 –

 $users = Get-QADUser -Disabled foreach ($user in $users) { Remove-QADMemberOf -Identity $user -RemoveAll } 

我最近想从(几乎所有)残疾用户中删除组,所以我在PowerShell v3(不需要第三方软件)中编写了自己的一套函数。

对于可组合性和重用性,我首先写了一个从所有组中除去指定用户的function(除了主组)外。 我可以添加一个选项来指定组types(安全性或分发),但目前我不需要该function。

 Function Remove-UserFromGroups ($User) { $PrimaryGroup = (Get-ADUser $User -Properties PrimaryGroup).PrimaryGroup Get-ADPrincipalGroupMembership $User | ForEach-Object { If ($_.distinguishedName -ne $PrimaryGroup) { Write-Output "Removing '$($User.Name)' from '$_'" Remove-ADGroupMember $_ -Members $User # -Confirm:$False } } } 

然后我使用这个function从所有组(除主要组以外)中删除所有禁用的用户。 我使用一个search基地,以便可以指定一个OU,我也有一个默认/系统用户的列表,他们的组成员资格不应该改变。

 Function Remove-DisabledUsersFromGroups ( $SearchBase = 'OU=department,DC=example,DC=com', $ExcludedUsers = @('krbtgt', 'SUPPORT_388945a0', 'Guest') ) { Get-ADUser -Filter { Enabled -eq $False } -SearchBase $SearchBase | Where { $_.Name -notin $ExcludedUsers } | ForEach-Object { Remove-UserFromGroups $_ } }