none
Como exportar usuários de um grupo do Active Directory que possui mais de 1500 contas? RRS feed

  • Pergunta

  • Tenho um grupo no Active Directory que possui 1605 usuários, como eu posso exportá-los para um arquivo texto, já que o script (abaixo) que estou utilizando limita em 1500 a quantidade de usuários?

     

    On Error Resume Next
    Set objGroup = GetObject _
      ("
    LDAP://cn=Scientists,ou=R&D,dc=NA,dc=fabrikam,dc=com")
    objGroup.GetInfo
    arrMemberOf = objGroup.GetEx("member")
    WScript.Echo "Members:"
    For Each strMember in arrMemberOf
        WScript.echo strMember
    Next

     

    Teria uma forma de fazer esta tarefa com uma ADODB “Active Directory Provider” que retornaria o atributo “sAMAccountName” dos usuários pertencentes a este grupo?

    terça-feira, 17 de outubro de 2006 15:38

Respostas

Todas as Respostas

  • Oi Alex, tudo bem?

    Experimente usar o script abaixo:

    Se este post te ajudou não esqueça de classifica-lo como útil

    Abraço e boa sorte

    '==========================================================================
    '
    ' NAME: ListLargeGroupMembers.vbs
    '
    ' AUTHOR: wilson Sekiguti
    ' DATE  : 19/10/2006
    '
    ' COMMENT: Altere a constante confile para o nome de arquivo desejado
    '          Altere a constante congroup para o nome do grupo a ser pesquisado 
    '
    '==========================================================================
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Const confile = "c:\membros.csv"
    Const conGroup = "cn=Scientists,ou=R&D,dc=NA,dc=fabrikam,dc=com"

    Set oCont = GetObject("GC:")
    For Each oGC In oCont
      strADsPath = oGC.ADsPath
    Next

    Set oConnection = CreateObject("ADODB.Connection")
    Set oRecordset = CreateObject("ADODB.Recordset")
    oConnection.Provider = "ADsDSOObject" 

    Set ofs = CreateObject("Scripting.FileSystemObject")
    Set Outfile = ofs.openTextFile(confile, ForWriting,True )

    oConnection.Open "ADs Provider"

    strQuery = "<" & strADsPath & ">;(&(objectClass=user)(objectCategory=person);userPrincipalName,samaccountname,memberof;subtree"
    Set oRecordset = oConnection.Execute(strQuery)
    While Not oRecordset.EOF
     on error resume next
     if instr(oRecordset.Fields("memberof"),conGroup) then
      outfile.writeline oRecordset.Fields("samaccountname")
     end if
     oRecordset.MoveNext
    Wend
    outfile.close
    Set ofs = nothing
    Set oCont = Nothing
    Set oGC = Nothing
    Set oRecordset = Nothing
    Set oConnection = Nothing

    terça-feira, 17 de outubro de 2006 20:25
  • Olá Wilson, obrigado pela dica, porém o script ListLargeGroupMembers.vbs  retornou o erro (abaixo) independente do grupo:

     

    " ListLargeGroupMembers.vbs(31, 1) Provider: Ocorreram um ou mais erros durante o processamento do comando. "

     

    é justamente a linha que executa a query. 

     

    Notei que você utiliza como moniker o Global Catalog , se eu conheço o object do grupo ("constate conGroup"), não seria melhor utilizar o moniker LDAP.

     

     

    Obrigado!

    quarta-feira, 18 de outubro de 2006 15:37
  • Oi Alex.

    O erro na linha da consulta pode estar ocorrendo porque o comando é muito longo e foi dividido em duas linhas.

    Eu inverti a lógica da consulta. Ao inves de pegar o grupo e listar todos os usuários que fazem parte (o que está causando o erro), eu estou pegando todos os usuários e verificando se entre os grupos que eles fazem parte está o grupo desejado.

    []'s

    quarta-feira, 18 de outubro de 2006 16:31
  • Boa tarde Wilson, no meu caso o comando não está dividido em duas linhas, deve ser por outro motivo. Será que com esta lógica não iremos ter problemas, pois serão lidos os grupos que cada usuário do domínio pertence e checado se algum é igual ao que nós estamos querendo. Imagine isto para uma grande quantidade de usuários com cada um conectado em no mínimo 5 grupos do domínio. 

    quarta-feira, 18 de outubro de 2006 19:51
  • Pessoal, numa boa... sei que é meio estranho dizer isso num fórum de Scripting (ainda mais sendo MVP nessa categoria) mas... não seria melhor usar a interface gráfica, criar uma consulta no Active Directory Users and Computers e exportar pra um CSV? Fica bem mais fácil tratar o arquivo depois...

    []s,


    Vinicius Canto
    MVP Visual Developer - Scripting
    Bach. Ciencias da Computação - USP São Carlos

    Blog sobre Scripting: http://viniciuscanto.blogspot.com

    quarta-feira, 18 de outubro de 2006 22:22
    Moderador
  • Ah, tem mais: na interface gráfica ele exibe a string de consulta...


    []s,

    Vinicius Canto
    MVP Visual Developer - Scripting
    Bach. Ciencias da Computação - USP São Carlos

    Blog sobre Scripting: http://viniciuscanto.blogspot.com

    quarta-feira, 18 de outubro de 2006 22:23
    Moderador
  • Boa tarde Vinícius, você saberia me dizer como ficaria a string de consulta que retornaria os usuários de um determinado grupo ?

    Obrigado.

    quinta-feira, 19 de outubro de 2006 18:40
  • Bom dia, realizei a consulta gráficamente e depois transferi para o script conforme abaixo :

    Const ADS_SCOPE_SUBTREE = 2

     

    Set objConnection = CreateObject("ADODB.Connection")

    Set objCommand =   CreateObject("ADODB.Command")

    objConnection.Provider = "ADsDSOObject"

    objConnection.Open "Active Directory Provider"

     

    Set objCOmmand.ActiveConnection = objConnection

    objCommand.CommandText = _

        "Select sAMAccountName from 'LDAP://DC=exemplo,DC=com' " _

            & "Where objectClass='User' AND memberof='CN=GRUPO,OU=EXEMPLO,DC=exemplo,DC=com'" 

    objCommand.Properties("Page Size") = 1000

    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    Set objRecordSet = objCommand.Execute

    objRecordSet.MoveFirst

     

    Do Until objRecordSet.EOF

        Wscript.Echo objRecordSet.Fields("sAMAccountName").Value

        objRecordSet.MoveNext

    Loop

    Valeu pela ajuda galera !

    sexta-feira, 20 de outubro de 2006 15:02
  • Sorry... acho que cheguei atrasado =)

    A parte boa é que o problema foi resolvido.

     

     

    Espero ter ajudado,

    --
    Vinicius Canto <scripterbratgmaildotcom>
    MVP Visual Developer - Scripting
    MCP Windows 2000 Server, Windows XP e SQL Server 2000
    Blog sobre Scripting: http://viniciuscanto.blogspot.com

    sexta-feira, 20 de outubro de 2006 17:49
    Moderador
  • pra incrementar mais a solução

    Usem uma bat com a seguinte linha

     cscript nomedoarquivo.vbs > oquequiser.txt

    Abraços e boas consultas!

    sexta-feira, 17 de novembro de 2006 20:49