Active Directory - remova usuários de um grupo

3

Estou procurando uma maneira de remover TODOS os usuários de uma lista de grupos do Active Directory.

Por exemplo, eu tenho um arquivo txt com vários nomes de grupos, e gostaria de passar por todos eles e remover todos os usuários dentro deles.

Uma maneira de fazer isso sem usar um arquivo de texto também funcionaria, mas eu tenho uma quantidade muito grande de grupos que precisam fazer isso, e talvez também no futuro (possivelmente periodicamente).

É com isso que estou trabalhando agora:

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 

Obrigado!

    
por Jason Perkins 05.03.2012 / 22:44

3 respostas

4

Powershell. Coloque todos os seus grupos em ingroups.txt , um por linha. Salve o script como .ps1 file e execute.

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

Você deve ter o Windows RSAT instalado, pois ele usa os cmdlets do Active Directory. Se um grupo não existir ou estiver vazio, você receberá alguns erros do PowerShell.

    
por 05.03.2012 / 23:55
3
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

Eu uso isso para remover os usuários de um determinado grupo.

Acho que uma boa solução para você seria remover os membros de TODOS os grupos em uma UO Certa, o que seria muito mais limpo.

EDITAR:

Na verdade, encontrei algo que poderia funcionar melhor, talvez queira executá-lo em um ambiente de teste primeiro, para que você possa aprender o que está fazendo. Ou alguém mais experiente pode verificar se não exclui todos os usuários ou grupos em seu ambiente.

' 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
    
por 05.03.2012 / 23:04
1

Tente usar as ferramentas de linha de comando do Windows para o Active Directory. Eu acho que o comando que você está procurando é dsrm.

Eu os achei muito simples de usar. As ferramentas são instaladas em um servidor que possui as ferramentas AD DS e AD LDS instaladas. No Windows Server 2008 R2, isso está localizado em Remote Server Administration Tools -> Remote Administration Tools . É considerado um recurso, não um papel.

O comando para executar seria algo como isto:

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

Eu sugiro testá-lo primeiro, é claro, mas acredito que isso funcione.

Para mais informações sobre a ferramenta de linha de comando para usar, veja isto: link

Outras ferramentas de linha de comando do AD são:

dsadd
dsmod
dsquery
dsmove

Espero que isso ajude.

    
por 05.03.2012 / 23:21