none
Relatório do AD. RRS feed

  • Pergunta

  • Estou precisando gerar um relatório para documentação do AD, com as seguinte especificações.

    Nome do usuário - Nome de Logon - Grupos que pertence.

    Existe alguma forma de fazer isso via script?

    Obrigado.

    segunda-feira, 23 de julho de 2012 21:00

Respostas

  • Fabio Jr

    Consegui gerar o relatorio necessario com o script abaixo informado.

    Const ForWriting = 2
    filePath = "Users_and_groups.txt"
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTextFile = objFSO.OpenTextFile(filepath, ForWriting, True)
    Set rootDSE = GetObject("LDAP://RootDSE")
    DomainContainer = rootDSE.Get("defaultNamingContext")
    Set conn = CreateObject("ADODB.Connection")
    conn.Provider = "ADSDSOObject"
    conn.Open "ADs Provider"
    strLDAP = "<LDAP://" & DomainContainer & ">;(&(objectCategory=person)(objectClass=user));adspath,distinguishedname;subtree"
    Set oComm = CreateObject("ADODB.Command")
    oComm.ActiveConnection = conn
    oComm.CommandText = strLDAP
    oComm.Properties("Sort on") = "DisplayName"
    oComm.Properties("Page size") = 1500
    Set rs = oComm.Execute
    objTextFile.writeLine("Usuário"& vbtab & "Script" & vbtab & "Grupos")
    While Not rs.EOF
     grps = ""
     Set User = GetObject(rs.Fields(0).Value)
     if isarray(User.MemberOf) then
     For each grp in User.memberOf
     grp1 = split(grp,",")
     grps = grps & " ; " & grp1(0)
     Next
     objTextFile.writeLine(User.DisplayName & vbtab & User.ScriptPath & vbtab & grps)
     else
    ' grp1 = split(User.MemberOf,",")
     grp1 = User.MemberOf
     objTextFile.writeLine(User.DisplayName & vbtab & User.ScriptPath & vbtab & grp1)
     end if
     
     rs.MoveNext()
    wend
    MsgBox "Process complete!"
    

    sexta-feira, 27 de julho de 2012 17:29

Todas as Respostas

  • Ronny, 

    Veja este tópico aqui do fórum

    Exportar uma lista com os nomes de usuários e grupos que ele pertence

    http://social.technet.microsoft.com/Forums/pt/scriptadminpt/thread/039d3076-4c41-4e11-9cc4-d5115db472b6

    Se tiver alguma dificuldade informe qual script você utilizou, se deu algum erro copie e cole aqui.


    Fábio de Paula Junior

    segunda-feira, 23 de julho de 2012 23:23
    Moderador
  • Segue um complemento.

    http://gallery.technet.microsoft.com/Localizar-os-usuarios-que-6e5a1b45


    O mundo é uma "janela" de oportunidades

    terça-feira, 24 de julho de 2012 11:59
  • Ronny,

    Acho que os comandos dsquery e dsget atendem sua necessidade. Digite os comandos baixo no prompt de comando:

    dsquery user dc=contoso,dc=com | dsget user -display -samid -memberof > c:\log.txt

    No comando acima, você deve substituir o domínio dc=contoso,dc=com pelo seu domínio, por exemplo, se seu domínio for microsoft.com.br ficará como dc=microsoft,dc=com,dc=br. No comando acima você está solicitando o displayName, o LogonName e os grupos do usuário, agora você pode solicitar outros dados como firstName (-fn), lastName (-ln) ou description (-desc), e por fim o comando irá criar um arquivo texto chamado log.txt e jogará os dados de todos os usuários do domínio neste txt, porém caso seu domínio tenha mais de 100 usuários você deve informar a quantidade limite de usuários que o comando irá retornar, como mostra o exemplo abaixo, onde eu informo um limite de 1000 usuários:

    dsquery user dc=contoso,dc=com -limit 1000 | dsget user -display -samid -memberof > c:\log.txt

    Espero ter ajudado.

    Att,

    Cleonilson Silva
    terça-feira, 24 de julho de 2012 13:35
  • Cleonilson Silva

    Uma pergunta na parte dos grupos, esse comando irá mostrar os grupos que o usuário pertence, e ou faz parte?

    terça-feira, 24 de julho de 2012 17:54
  • Ronny,

    Acho que os comandos dsquery e dsget atendem sua necessidade. Digite os comandos baixo no prompt de comando:

    dsquery user dc=contoso,dc=com | dsget user -display -samid -memberof > c:\log.txt

    No comando acima, você deve substituir o domínio dc=contoso,dc=com pelo seu domínio, por exemplo, se seu domínio for microsoft.com.br ficará como dc=microsoft,dc=com,dc=br. No comando acima você está solicitando o displayName, o LogonName e os grupos do usuário, agora você pode solicitar outros dados como firstName (-fn), lastName (-ln) ou description (-desc), e por fim o comando irá criar um arquivo texto chamado log.txt e jogará os dados de todos os usuários do domínio neste txt, porém caso seu domínio tenha mais de 100 usuários você deve informar a quantidade limite de usuários que o comando irá retornar, como mostra o exemplo abaixo, onde eu informo um limite de 1000 usuários:

    dsquery user dc=contoso,dc=com -limit 1000 | dsget user -display -samid -memberof > c:\log.txt

    Espero ter ajudado.

    Att,

    Cleonilson Silva

    Não funcionou o comando informado, alterando o dc=dominio,dc=com,dc=br.

    Ele informa que o parâmetro esta errado.

     

    terça-feira, 24 de julho de 2012 19:38
  • Ronny,

    Poste aqui o texto do erro.


    Fábio de Paula Junior

    quarta-feira, 25 de julho de 2012 21:34
    Moderador
  • Fabio Jr

    Consegui gerar o relatorio necessario com o script abaixo informado.

    Const ForWriting = 2
    filePath = "Users_and_groups.txt"
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTextFile = objFSO.OpenTextFile(filepath, ForWriting, True)
    Set rootDSE = GetObject("LDAP://RootDSE")
    DomainContainer = rootDSE.Get("defaultNamingContext")
    Set conn = CreateObject("ADODB.Connection")
    conn.Provider = "ADSDSOObject"
    conn.Open "ADs Provider"
    strLDAP = "<LDAP://" & DomainContainer & ">;(&(objectCategory=person)(objectClass=user));adspath,distinguishedname;subtree"
    Set oComm = CreateObject("ADODB.Command")
    oComm.ActiveConnection = conn
    oComm.CommandText = strLDAP
    oComm.Properties("Sort on") = "DisplayName"
    oComm.Properties("Page size") = 1500
    Set rs = oComm.Execute
    objTextFile.writeLine("Usuário"& vbtab & "Script" & vbtab & "Grupos")
    While Not rs.EOF
     grps = ""
     Set User = GetObject(rs.Fields(0).Value)
     if isarray(User.MemberOf) then
     For each grp in User.memberOf
     grp1 = split(grp,",")
     grps = grps & " ; " & grp1(0)
     Next
     objTextFile.writeLine(User.DisplayName & vbtab & User.ScriptPath & vbtab & grps)
     else
    ' grp1 = split(User.MemberOf,",")
     grp1 = User.MemberOf
     objTextFile.writeLine(User.DisplayName & vbtab & User.ScriptPath & vbtab & grp1)
     end if
     
     rs.MoveNext()
    wend
    MsgBox "Process complete!"
    

    sexta-feira, 27 de julho de 2012 17:29