Active Directory 管理 - 从已禁用的用户中删除组

Active Directory 管理 - 从已禁用的用户中删除组

我正在努力寻找一个合适的方法来做到这一点。出于这样或那样的原因(不重要,但就是这个原因),我们有很多用户被禁用,但仍然是所有预禁用组的成员。这导致了一些问题,例如分发列表失败、枚举 ACL 困难等。

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

答案1

此示例批处理文件将执行您所要求的操作。您需要编辑命令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
    )
)

答案2

使用 Powershell 和可用的 Quest AD cmdlet这里,以下 PowerShell 脚本应该可以解决问题 -

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

答案3

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

为了可组合性和可重复使用性,我首先编写了一个函数,用于从所有组(除其主要组外)中删除指定的用户。我可以添加一个选项来指定组类型(安全或分发),但目前我不需要该功能。

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
            }
        }
}

然后,我使用此功能从所有组(除其主要组外)中删除所有已禁用的用户。我使用搜索库,以便可以指定 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 $_
        }
}

相关内容