none
Listar usuários de determinado grupo RRS feed

  • Pergunta

  • Olá, pessoal

    Gostaria de saber como faço um script para listar os usuários de um determinado grupo. Meu Servidor 2k server e as estações xp pro.

    Desde  já agradeço!

    kamacedo

    quarta-feira, 14 de fevereiro de 2007 16:16

Respostas

  •  

     albertsantos22,

     

     

    Descobrir onde estava o erro qnd postei teve uma quebra de linha não especificada na 5º linha de baixo para cima(TOTAL DE "& i &" MEMBROS ENCONTRADOS----"). Já consertei e testei, tenta novamente ai. Abç!

     

    Code Snippet

    'Log verificação de membros em um grupo local
    'Por Leonardo Couto Conrado
    '08/07/2008


    Dim objDom,objNetwork
    Set WshNetwork = WScript.CreateObject("WScript.Network")

    StrComputer = "localhost" 'Computador a ser verificado
    StrGroup = "Administradores" ' Verificar membros do Grupo Local Administradores
    Local = "c:\" 'Local para salvar o TXT com os membros do grupo especificado
    FileLog = Local & WshNetwork.ComputerName & "_" & StrGroup  & ".txt"
    ActionList = "no"
    Set ObjFSO = CreateObject("Scripting.FileSystemObject")
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Set ObjFileRead = ObjFSO.opentextfile(FileLog, ForReading, True)
    Set ObjFileAppending = ObjFSO.opentextfile(FileLog, ForAppending, True)
    Set objNetwork = CreateObject("WScript.Network")
    Set objGroup = GetObject("WinNT://" & StrComputer & "/" & StrGroup & ",group")

    StrMemberAdsPath = "WinNT://" & StrComputer & "/" & StrMember ' AdsPath do Membro
    AdsPathGroup = objGroup.AdsPath
    'ColItens.filter = Array("group")
    WriteLog now() & " Membros do grupo " & Ucase(StrGroup) & " possuindo o nome único de " & AdsPathGroup
    i = 0
    For Each objUser In objGroup.Members
     i = i + 1
     WriteLog i & "- " & Ucase(objUser.name) & " é um " & objUser.class & " e seu nome único é " & objUser.AdsPath
     ActionList = "yes"
     
    Next
    if ActionList = "yes" then
     WriteLog "-------------------------------------FIM--------------------------------TOTAL DE "& i &" MEMBROS ENCONTRADOS----"
    end if

    Function WriteLog (Text)
     ObjFileAppending.WriteLine Text
    End Function

     

     

    sexta-feira, 11 de julho de 2008 01:15

Todas as Respostas

  • Cara, tava com um problema parecido

    Utiliza o csvde ou ldif para isto, segue um tutorial para te ajudar http://support.microsoft.com/kb/327620

    Se o post foi útil, classifique-o como resposta.

     

    Valeu

    quarta-feira, 14 de fevereiro de 2007 23:10
  • Pessoal,

    Só mais uma dica, vocês podem exportar os usuários dos grupos utilizando o utilitário showmbrs que está disponível no NTReskit ou no site da Microsoft.

    Utilização:

    showmbrs \\dominio\grupo

     

    Robsom.

     

    sexta-feira, 16 de fevereiro de 2007 12:51
  • Olá!
    Você pode usar o seguinte comando num console CMD:
    net group "nome do grupo" /domain


    quinta-feira, 1 de março de 2007 17:07
  • 'Este script busca no AD os membros de determinado grupo e escreve em um arquivo no diretório c:\grupos
    'Feito por Guina (02\10\2006)


    On Error Resume Next

    Diretorio= "c:\grupos"

    grupo= InputBox("Digite o nome do grupo ")

    file= grupo & ".txt"

    Set oFSO = WScript.CreateObject("Scripting.FileSystemObject")

    Set objFolder = oFSO.CreateFolder(Diretorio)
    Set Dir=oFSO.GetFolder(Diretorio)

    Set arqtxt = Dir.CreateTextFile(file, True)

    Set rootDSE = GetObject("LDAP://RootDSE")
    domainContainer =  rootDSE.Get("defaultNamingContext")
    Set conn = CreateObject("ADODB.Connection")
    conn.Provider = "ADSDSOObject"
    conn.Open "ADs Provider"
    LDAPStr = "<LDAP://" & DomainContainer & ">;(&(objectclass=group)(objectCategory=group)(samaccountname=" & grupo & "));adspath;subtree"

    Set rs = conn.Execute(LDAPStr)
    If rs.RecordCount = 1 Then
       Set oGroup = GetObject(rs.Fields(0).Value)
             
    End If
    for each strMember in oGroup.member

    Spmember = Split(strMember, ",")

    member= Spmember(0)

    arqtxt.WriteLine Mid (member,4)
        
    Next

    iGroupCount = 0
         For each strMember in oGroup.member
              If Len(strMember) = 0 Then
                   wscript.echo "Grupo sem nenhum membro ou não existente!."
              Else
                   iGroupCount = iGroupCount + 1
                 
              End If
         Next

    arqtxt.WriteLine("Número total de usuarios neste grupo = ") & iGroupCount
    arqtxt.Close 

    WScript.echo "pronto!!!"
    wscript.quit

    • Sugerido como Resposta Murilo Assis quinta-feira, 17 de março de 2011 12:02
    quinta-feira, 8 de março de 2007 16:30
  •  

    Este também funfa, mas o script de cima está bem legal!!

     

    Boa sorte

     

    Set objNetwork = CreateObject("WScript.Network")
    Set objGroupLegis = GetObject _
      ("LDAP://CN=GR_GLOBAL_MAINTENANCE_TECHNITIAN,OU=GLOBAL,OU=GROUPS,OU=MAINTENANCE,OU=PRD,OU=BR,DC=suneast,DC=com,DC=br")
      
     
    For each objMember in objGroupLegis.Members
     
        wscript.echo objMember.sAMAccountName

    Next

     

    'para gravar em um arquivo use cscritp.exe nomedoscript.vbs > nomedoarquivo.txt

     

    Romeu.

     

    segunda-feira, 21 de maio de 2007 12:40
  • Gostaria de saber se tem como fazer isso mas ao invés de pesquisar os grupos do AD ele pesquisar o grupo LOCAL de uma determinada maquina.


    Por exemplo, teria como executar esse script no servidor onde ele buscaria TODAS AS MAQUINAS QUE ESTAO NO AD, verificaria o grupo "administradores" ou "adminitrators" (ou qq outro) LOCAL DESSAS MAQUINAS e me gerasse um arquivo com os objetos (usuarios ou grupos) que sao MEMBROS desse grupo?! Preciso fazer isso em uma rede com cerca de 5 mil estacoes.

     

    Em todo caso, se eu conseguir rodar INDIVIDUALMENTE um script que capture os menbros de um grupo LOCAL da maquina eu posso rodar ele na REDE via GPO e ao gerar o arquivo ele tem que gerar algo como NOMENETBIOSDAMAQUINA_GRUPO.txt e peço para ele apontar para salvar esse arquivo em um determinado local da rede.

     

    SERIA POSSIVEL?! Me ajudem por favor!!!

     

    Grato.

     

     André Schäffer wrote:

    'Este script busca no AD os membros de determinado grupo e escreve em um arquivo no diretório c:\grupos
    'Feito por Guina (02\10\2006)


    On Error Resume Next

    Diretorio= "c:\grupos"

    grupo= InputBox("Digite o nome do grupo ")

    file= grupo & ".txt"

    Set oFSO = WScript.CreateObject("Scripting.FileSystemObject")

    Set objFolder = oFSO.CreateFolder(Diretorio)
    Set Dir=oFSO.GetFolder(Diretorio)

    Set arqtxt = Dir.CreateTextFile(file, True)

    Set rootDSE = GetObject("LDAP://RootDSE")
    domainContainer =  rootDSE.Get("defaultNamingContext")
    Set conn = CreateObject("ADODB.Connection")
    conn.Provider = "ADSDSOObject"
    conn.Open "ADs Provider"
    LDAPStr = "<LDAP://" & DomainContainer & ">;(&(objectclass=group)(objectCategory=group)(samaccountname=" & grupo & "));adspath;subtree"

    Set rs = conn.Execute(LDAPStr)
    If rs.RecordCount = 1 Then
       Set oGroup = GetObject(rs.Fields(0).Value)
             
    End If
    for each strMember in oGroup.member

    Spmember = Split(strMember, ",")

    member= Spmember(0)

    arqtxt.WriteLine Mid (member,4)
        
    Next

    iGroupCount = 0
         For each strMember in oGroup.member
              If Len(strMember) = 0 Then
                   wscript.echo "Grupo sem nenhum membro ou não existente!."
              Else
                   iGroupCount = iGroupCount + 1
                 
              End If
         Next

    arqtxt.WriteLine("Número total de usuarios neste grupo = ") & iGroupCount
    arqtxt.Close 

    WScript.echo "pronto!!!"
    wscript.quit

    quinta-feira, 10 de julho de 2008 22:28
  •  

    Só colocar o arquivo .VBS em uma pasta compartilhada com permissão a todos usuários e executar no logon de cada usuário. Qualquer dúvida estamos ai.

     

     

    Code Snippet

     

    'Log verificação de membros em um grupo local 
    'Por Leonardo Couto Conrado
    '08/07/2008
    Dim objDom,objNetwork
    Set WshNetwork = WScript.CreateObject("WScript.Network")

    StrComputer = "localhost" 'Computador a ser verificado
    StrGroup = "Administradores" ' Verificar membros do Grupo Local Administradores
    Local = "c:\" 'Local para salvar o TXT com os membros do grupo especificado
    FileLog = Local & WshNetwork.ComputerName & "_" & StrGroup  & ".txt"
    ActionList = "no"
    Set ObjFSO = CreateObject("Scripting.FileSystemObject")
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Set ObjFileRead = ObjFSO.opentextfile(FileLog, ForReading, True)
    Set ObjFileAppending = ObjFSO.opentextfile(FileLog, ForAppending, True)
    Set objNetwork = CreateObject("WScript.Network")
    Set objGroup = GetObject("WinNT://" & StrComputer & "/" & StrGroup & ",group")

    StrMemberAdsPath = "WinNT://" & StrComputer & "/" & StrMember ' AdsPath do Membro
    AdsPathGroup = objGroup.AdsPath
    'ColItens.filter = Array("group")
    WriteLog now() & " Membros do grupo " & Ucase(StrGroup) & " possuindo o nome único de " & AdsPathGroup
    i = 0
    For Each objUser In objGroup.Members
     i = i + 1
     WriteLog i & "- " & Ucase(objUser.name) & " é um " & objUser.class & " e seu nome único é " & objUser.AdsPath
     ActionList = "yes"
     
    Next
    if ActionList = "yes" then
     WriteLog "-------------------------------------FIM---------------------------------------TOTAL DE "& i &" MEMBROS

    ENCONTRADOS------------"
    end if

    Function WriteLog (Text)
     ObjFileAppending.WriteLine Text
    End Function


     

     

     


     

     

     

    att,

     

    Leonardo Couto.

    quinta-feira, 10 de julho de 2008 23:28
  •  

    Cara, tentei testar aqui na maquina do trabalho (estou aqui até meia noite se puder me add no msn albertsantos22@yahoo.com.br) e copiando e colando no NOTEPAD, salvando ele como VBS (sem tirar os Créditos nem nada) ele me da o seguinte erro:

    ____________________________________________________

    LINE: 17

    CHAR: 1

    ERROR: YOU WERE NOTE CONNECTED BECAUSE A DUPLICATE NAME EXISTS ON THE NETWORK. GOTO SYSTEM IN CONTROL PANEL TO CHANGE THE COMPUTER NAME AND TRY AGAIN.

    CODE: 80070034

    SOURCE: (NULL)

    ____________________________________________________

     

    Sendo que nao existe outra maquina na rede com o mesmo NOME, e tambem testei em uma VM com windows 2000 e em uma com o XP e dá o mesmo erro... e elas estao como WORKGROUP em redes diferentes nao sendo possivel ter outra estacao com o mesmo nome conforme descrito no erro.

     

    Lembrando que como é um teste inicial, salvei o arquivo como TESTE.vbs no meu DESKTOP mesmo, no caso se ele funcionasse ele vai gerar o arquivo TXT na local onde está salvo o SCRIPT?!

     

    Lembrando que como o Windows aqui é em ingles, alterei já o ADMINISTRADORES para ADMINISTRATORS.

     

    Que eu faço agora!!!

     

    Brigadao pela força cara!!!

     

    quinta-feira, 10 de julho de 2008 23:56
  •  

     albertsantos22,

     

     

    Descobrir onde estava o erro qnd postei teve uma quebra de linha não especificada na 5º linha de baixo para cima(TOTAL DE "& i &" MEMBROS ENCONTRADOS----"). Já consertei e testei, tenta novamente ai. Abç!

     

    Code Snippet

    'Log verificação de membros em um grupo local
    'Por Leonardo Couto Conrado
    '08/07/2008


    Dim objDom,objNetwork
    Set WshNetwork = WScript.CreateObject("WScript.Network")

    StrComputer = "localhost" 'Computador a ser verificado
    StrGroup = "Administradores" ' Verificar membros do Grupo Local Administradores
    Local = "c:\" 'Local para salvar o TXT com os membros do grupo especificado
    FileLog = Local & WshNetwork.ComputerName & "_" & StrGroup  & ".txt"
    ActionList = "no"
    Set ObjFSO = CreateObject("Scripting.FileSystemObject")
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Set ObjFileRead = ObjFSO.opentextfile(FileLog, ForReading, True)
    Set ObjFileAppending = ObjFSO.opentextfile(FileLog, ForAppending, True)
    Set objNetwork = CreateObject("WScript.Network")
    Set objGroup = GetObject("WinNT://" & StrComputer & "/" & StrGroup & ",group")

    StrMemberAdsPath = "WinNT://" & StrComputer & "/" & StrMember ' AdsPath do Membro
    AdsPathGroup = objGroup.AdsPath
    'ColItens.filter = Array("group")
    WriteLog now() & " Membros do grupo " & Ucase(StrGroup) & " possuindo o nome único de " & AdsPathGroup
    i = 0
    For Each objUser In objGroup.Members
     i = i + 1
     WriteLog i & "- " & Ucase(objUser.name) & " é um " & objUser.class & " e seu nome único é " & objUser.AdsPath
     ActionList = "yes"
     
    Next
    if ActionList = "yes" then
     WriteLog "-------------------------------------FIM--------------------------------TOTAL DE "& i &" MEMBROS ENCONTRADOS----"
    end if

    Function WriteLog (Text)
     ObjFileAppending.WriteLine Text
    End Function

     

     

    sexta-feira, 11 de julho de 2008 01:15
  • Obrigado Mais uma vez, pra mim resolveu PERFEITAMENTE conforme minhas necessidades... CADA DETALHE COLOCADO POR MIM FOI FEITO NESSE SCRIPT!!!

     

     

    PERFEITO!!!!

     

    Eae galera, da pra fechar o POST já?!?!?!

     

    Vamos fechar se atender as necessidades para que as pessoas possam se orientar por eles bele?!

     

    Abraços a todos!!!

     

    sexta-feira, 11 de julho de 2008 03:08
  •  

    Caro André

     

    Preciso de uma ajuda sua, estou querendo listar os usuários de um determinado grupo no AD, esse script funciona em parte, ele só relaciona o grupo de dominio local, o grupo de dominio global ele não lista, informa que não existe nenhum usuário dentro do grupo, voçê ou alguém poderia quebrar esse galho para mim???

     

    Caso alguém tenha outra solução para esse problema, me informe, o que não dá é ficar digitando em bloco de notas os membros de um grupo.....

     

    Atenciosamente,

    Marcio Sousa

    terça-feira, 21 de outubro de 2008 11:56
  • Galera,

     

    Efetuei algumas correções e atualizações para atender as minhas necessidades, segue abaixo o script para o caso de alguém com a mesma dificuldade.

     

    '-----------------------------------------------------------------------------------

    On Error Resume Next

    Diretorio= "c:\"

    grupo= InputBox("Digite o nome do grupo ")

    file= grupo & ".txt"

    Set oFSO = WScript.CreateObject("Scripting.FileSystemObject")

    Set objFolder = oFSO.CreateFolder(Diretorio)
    Set Dir=oFSO.GetFolder(Diretorio)

    Set arqtxt = Dir.CreateTextFile(file, True)

    Set objNetwork = CreateObject("WScript.Network")
    Set objGroupLegis = GetObject _
      ("LDAP://CN="+grupo+",OU=Users,DC=redes,DC=,DC=com,DC=br")

    For each objMember in objGroupLegis.Members 
        arqtxt.WriteLine Mid (objMember.Name,4)

    Next

    arqtxt.Close 

    WScript.echo "FIM!!!"
    wscript.quit

    '-----------------------------------------------------------------------------------

     

     

    quarta-feira, 22 de outubro de 2008 14:42
  • 'Este script busca no AD os membros de determinado grupo e escreve em um arquivo no diretório c:\grupos
    'Feito por Guina (02\10\2006)


    On Error Resume Next

    Diretorio= "c:\grupos"

    grupo= InputBox("Digite o nome do grupo ")

    file= grupo & ".txt"

    Set oFSO = WScript.CreateObject("Scripting.FileSystemObject")

    Set objFolder = oFSO.CreateFolder(Diretorio)
    Set Dir=oFSO.GetFolder(Diretorio)

    Set arqtxt = Dir.CreateTextFile(file, True)

    Set rootDSE = GetObject("LDAP://RootDSE")
    domainContainer =  rootDSE.Get("defaultNamingContext")
    Set conn = CreateObject("ADODB.Connection")
    conn.Provider = "ADSDSOObject"
    conn.Open "ADs Provider"
    LDAPStr = "<LDAP://" & DomainContainer & ">;(&(objectclass=group)(objectCategory=group)(samaccountname=" & grupo & "));adspath;subtree"

    Set rs = conn.Execute(LDAPStr)
    If rs.RecordCount = 1 Then
       Set oGroup = GetObject(rs.Fields(0).Value)
             
    End If
    for each strMember in oGroup.member

    Spmember = Split(strMember, ",")

    member= Spmember(0)

    arqtxt.WriteLine Mid (member,4)
        
    Next

    iGroupCount = 0
         For each strMember in oGroup.member
              If Len(strMember) = 0 Then
                   wscript.echo "Grupo sem nenhum membro ou não existente!."
              Else
                   iGroupCount = iGroupCount + 1
                 
              End If
         Next

    arqtxt.WriteLine("Número total de usuarios neste grupo = ") & iGroupCount
    arqtxt.Close 

    WScript.echo "pronto!!!"
    wscript.quit


    Este script funciona perfeitamente, gera a lista de membros de um determinado grupo, sejam usuários, sejam computadores.

    Porém, necessito de mais um detalhe, o qual tentei alterar o script, mas sem sucesso, que seria a inclusão da OU de cada objeto ao lado do nome.

    Por exemplo, hoje ele gera o resultado assim:

    PC01
    PC02
    PC03

    A minha necessidade, é de que ele inclua a OU ao lado, como é mostrado o resultado da consulta gráfica no AD:

    PC01 Nome-AD.local/NomeOU1/NomeOU2
    PC02 Nome-AD.local/NomeOU1/NomeOU2
    PC03 Nome-AD.local/NomeOU1/NomeOU2

    Se alguém conseguir alterar o script acima, incluindo este parâmetro, serei grato!

    Obrigado!

    quinta-feira, 17 de março de 2011 12:14
  • Pessoal, sou formado em computação e atualmente trabalho na parte de infra. Ano passado durante a migração do nosso e-mail interno para office 365, foi necessário gerar relatório com todos os grupos e seus respectivos usuários. Foi nessa página que consegui ajuda para resolver essa questão. Utilizando um pouco dos conhecimentos adquiridos na faculdade (não conhecia nada de VB até então), consegui fazer uma adaptação do código do Guina no qual eu fiz alguns ajustes no qual eu quero compartilhar.

    Ajustes:

    'Permitir a leitura de um arquivo texto com os nomes dos grupos, não sendo necessário a entrada um a um.
    'Gerar um arquivo único com todos os grupos (anteriormente gerava um arquivo para cada grupo inserido manualmente um a um.

    Estrutura de pasta:

    Pasta: C:\listar_grupos\
    Arquivo com os nomes dos grupos: grupos.txt
    Pasta do resultado: c:\listar_grupos\relatorios

    'Este script busca no AD os membros de determinado grupo e escreve em um arquivo no diretório c:\grupos
    'Feito por Guina (02\10\2006)
    '--------------------------------------
    
    '-------------------------
    '--Alterações realizadas--
    
    'Permitir a leitura de um arquivo texto com os nomes dos grupos, não sendo necessário a entrada um a um.
    'Gerar um arquivo único com todos os grupos (anteriormente gerava um arquivo para cada grupo inserido manualmente um a um.
    'Fonte:http://social.technet.microsoft.com/Forums/de-DE/3a761ed7-80fe-4733-b586-b0d81a26daec/listar-usurios-de-determinado-grupo?forum=scriptadminpt
    'Modificado por Felipe Camilo Ricardo (27/02/2014)
    
    
    Const ForReading = 1
    'Const Pre = "dsquery user -samid "
    'Const Pos = " | dsget user -memberof -expand | dsget group -samid"
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile("C:\listar_grupos\grupos.txt", 1)
    
    
    Wscript.Echo strContents
    
    Do While objFile.AtEndOfStream = False
        strLine = objFile.ReadLine
       
        On Error Resume Next
    
        Diretorio= "c:\listar_grupos\relatorios"
    
        grupo = strline
    
        file= "relatorio-grupos.txt"
    
    
        Set oFSO = WScript.CreateObject("Scripting.FileSystemObject")
    
        Set objFolder = oFSO.CreateFolder(Diretorio)
        Set Dir=oFSO.GetFolder(Diretorio)
    
        Set arqtxt = Dir.CreateTextFile(file, True)
    
        Set rootDSE = GetObject("LDAP://RootDSE")
        domainContainer =  rootDSE.Get("defaultNamingContext")
        Set conn = CreateObject("ADODB.Connection")
        conn.Provider = "ADSDSOObject"
        conn.Open "ADs Provider"
        LDAPStr = "<LDAP://" & DomainContainer & ">;(&(objectclass=group)(objectCategory=group)(samaccountname=" & grupo & "));adspath;subtree"
    
        Set rs = conn.Execute(LDAPStr)
        If rs.RecordCount = 1 Then
            Set oGroup = GetObject(rs.Fields(0).Value)
              
        End If
        
        arqtxt.WriteLine(grupo)
        
    
        iGroupCount = 0    
        for each strMember in oGroup.member
    
            Spmember = Split(strMember, ",")
    
            member= Spmember(0)
    
            arqtxt.WriteLine Mid (member,4)
            member = ""
         
        Next
        
    	member = ""
    
        For each strMember in oGroup.member
            If Len(strMember) = 0 Then
                wscript.echo "Grupo sem nenhum membro ou não existente!."
            Else
                iGroupCount = iGroupCount + 1
                  
            End If
        Next
    
        arqtxt.WriteLine("Número total de usuarios neste grupo = ") & iGroupCount
       
    
        arqtxt.WriteLine(Chr(13))
        WScript.echo grupo & Chr(13)
    
    
    Loop
    
    arqtxt.Close 
    wscript.quit



    terça-feira, 30 de junho de 2015 18:54
  • Embora seja uma thread antiga eu vejo um código deste tamanho e não consigo deixar de pensar em otimizar com recursos atuais. Algo simples de se fazer com PowerShell 3.0 e Windows PowerShell Modules for Active Directory:

    # Script Requirements: PowerShell 3.0 and Windows PowerShell Modules for Active Directory
    Import-Module ActiveDirectory
    $GroupNames = Get-ADObject -Filter "ObjectClass -eq 'group'" -SearchBase "DC=contoso,DC=com" -SearchScope Subtree | %{$_.Name}
    ForEach ($Group in $GroupNames){
    	Get-ADGroupMember -Identity $Group | Select @{Name="GroupName";Expression={$Group}},SamAccountName,Name,DistinguishedName | Sort Name | Export-Csv -Path C:\OutPut\Groups.csv -NoTypeInformation -Append
    }

    O resultado será um arquivo C:\OutPut\Groups.csv que pode ser importado no MS Excel contendo o nome do grupo, SAMAccountName, nome do usuário e o DN (DistinghishedName) de cada membro em cada grupo existentes no domínio Contoso.com.

    quarta-feira, 1 de julho de 2015 03:56