我正在寻找一种方法来从 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
希望这可以帮助。