Active Directory - 从组中删除用户

Active Directory - 从组中删除用户

我正在寻找一种方法来从 Active Directory 组列表中删除所有用户。

例如,我有一个包含一堆组名的 txt 文件,我想浏览所有组名并删除其中的所有用户。

不使用文本文件的方法也可以,但我有大量的组需要完成此操作,并且将来可能也需要这样做(可能是定期)。

这就是我现在正在做的事情:

Set objGroup = GetObject("LDAP://CN=Finance Users,OU=Finance,DC=fabrikam,DC=com") 

For Each strUser in objGroup.Member 
    objGroup.PutEx ADS_PROPERTY_DELETE, "member", Array(strUser) 
    objGroup.SetInfo 
End 

谢谢!

答案1

Powershell。将所有组放入ingroups.txt,每行一个。将脚本保存为.ps1文件,然后执行。

function removeAllUsersFromGroup{
    Param([String]$GroupName)
    BEGIN   { Import-Module ActiveDirectory; if ($GroupName -eq ""){ throw "No group name specified" } Write-Host "Removing users from $GroupName" -f green }
    PROCESS { 
        $groupSID = (Get-ADGroup "Test Group").SID
        $groupMembers = Get-ADGroupMember -Identity $groupSID

        foreach ($member in $groupMembers){
            Remove-ADGroupMember -Identity $groupSID -Member $member.SID
        }
    }
    END     {  }
}

Get-Content .\ingroups.txt | %{ removeAllUsersFromGroup-groupname $_}

您必须安装 Windows RSAT,因为它使用 Active Directory cmdlet。如果组不存在或为空,您将收到一些 powershell 错误。

答案2

Const ADS_PROPERTY_CLEAR = 1 

Set objGroup = GetObject("LDAP://cn=Finance Users,ou=Finance,dc=fabrikam,dc=com") 

objGroup.PutEx ADS_PROPERTY_CLEAR, "member", 0
objGroup.SetInfo

我用它来从某个组中删除用户。

我认为一个好的解决方案是删除某个 OU 中所有组的成员,这样会干净得多。

编辑 :

我实际上发现了一些可能效果更好的方法,可能需要先在测试环境中运行它,这样你就可以了解它在做什么。或者其他更熟悉的人可以查看它,以确保它不会删除你环境中的每个用户或组。

' Specify Distinguished Name of OU. All users in this OU
' that are members of the specified group will be removed.
strOU = "ou=Sales,ou=West,dc=MyDomain,dc=com"

' Bind to specified OU.
Set objOU = GetObject("LDAP://ou=Sales,ou=West,dc=MyDomain,dc=com")

' Filter on group objects.
objOU.Filter = Array("group")

' Enumerate all groups in the OU.
For Each objGroup In objOU
' Enumerate all direct members of the group.
For Each objMember In objGroup.Members
' Retrieve DN of parent container/OU of member.
Set objParent = GetObject(objMember.Parent)
strParentDN = objParent.distinguishedName
' Compare to specified OU.
If (LCase(strParentDN) = LCase(strOU)) Then
' Remove the member from the group.
objGroup.Remove(objMember.AdsPath)
End If
Next
Next

答案3

尝试使用 Active Directory 的 Windows 命令行工具。我认为您要查找的命令是 dsrm。

我发现它们使用起来非常简单。这些工具安装在安装了 AD DS 和 AD LDS 工具的服务器上。在 Windows Server 2008 R2 上,它位于 下Remote Server Administration Tools -> Remote Administration Tools。它被视为一项功能,而不是角色。

运行的命令如下所示:

dsrm -subtree -exclude -noprompt -c 
                             "CN=Finance Users,OU=Finance,DC=fabrikam,DC=com"

当然,我建议先进行测试,但我相信这应该可行。

有关要使用的命令行工具的更多信息,请参阅: http://technet.microsoft.com/en-us/library/cc731865(v=ws.10).aspx

其他有用的 AD 命令行工具包括:

dsadd
dsmod
dsquery
dsmove

希望这可以帮助。

相关内容