none
Script para listar membro de um grupo mas para varios grupos ao mesmo tempo RRS feed

  • Pergunta

  • Bom dia,

    Pessoal, tenho uma necessidade de listar membros de varios grupos. Eu até tenho o script que lista os membros de um grupo mas quando executo o script ele lista os membros e grava um arquivo txt com o nome do grupo.

    O problema é que tenho mais de 2000 grupos e não queira fazer isso grupo por grupo. Será que consigo adaptar o script para ler um arquivo txt com o nome dos grupos e depois gravar um txt com o nome de cada grupo?

    Abaixo o scritp que uso para fazer manualmente.

    groupName = inputbox("Please enter the name of the group:")
     FileName = groupName & ".txt"
     
    if groupName = "" then
         wscript.quit
     end if
     
    groupPath = getgrouppath(groupName)
     
    if groupPath = "" then
         wscript.echo "Unable to find the specified group in the domain"
         wscript.quit
     end if
     
    set objGroup = getobject(grouppath)
     set objFSO = createobject("scripting.filesystemobject")
     set objFile = objFSO.createtextfile(FileName)
     
    objFile.WriteLine("sAMAccountName")
     for each objMember in objGroup.Members
         objFile.WriteLine(objmember.samaccountname)
     next
     
    objFile.Close
     
    function getGroupPath(byval GroupName)
         set cmd=createobject("ADODB.Command")
         set cn=createobject("ADODB.Connection")
         set rs=createobject("ADODB.Recordset")
         
        cn.open "Provider=ADsDSOObject;"
         
        cmd.commandtext = "SELECT adspath from 'LDAP://" & getnc & _
                   "' WHERE objectCategory = 'Group' and sAMAccountName = '" & groupname & "'"
         cmd.activeconnection = cn
         
        set rs = cmd.execute
         
        if rs.bof <> true and rs.eof<>true then
             getgrouppath=rs(0)
         else
             getgrouppath = ""
         end if
         cn.close
     
    end function
    
    function getNC
         set objRoot=getobject("LDAP://RootDSE")
         getNC=objRoot.get("defaultNamingContext")
     end function


    Grato pela ajuda


    segunda-feira, 16 de julho de 2012 13:56

Respostas

  • Olha só vc inventou uma váriavel: strGroupName

    O parametro do seu script é o GroupName, no do exemplo que te passei é strComputer. Estas são as variaveis com a principal informação do script.

    Outra coisa, vc tirou a linha  FileName = groupName & ".txt", sem ela onde é que vc vai gravar a informação?

    Vc comentou um IF no inicio do script, veja que descomentei, ele é perfeito: Se não tiver parametro então sai do script.

    Outro erro, na primeira linha a variavel setada como ".", no caso do meu script ela é util porque se o cara não passar parametro então considera o computador local- que é representado por "." - no seu caso coloque ele como em branco ("").

    Não tenho ambiente pra testar seu script, tenta aí e me diga o resultado, de preferência com vc fez com prints.

    GroupName=""
    if wscript.arguments.count>0 then GroupName=wscript.arguments(0)
     
    if groupName = "" then
        wscript.quit
    end if
    
    FileName = groupName & ".txt"
    
    groupPath = getgrouppath(groupName)
     
    if groupPath = "" then
         wscript.echo "Unable to find the specified group in the domain"
         wscript.quit
     end if
     
    set objGroup = getobject(grouppath)
     set objFSO = createobject("scripting.filesystemobject")
     set objFile = objFSO.createtextfile(FileName)
     
    objFile.WriteLine("sAMAccountName")
     for each objMember in objGroup.Members
         objFile.WriteLine(objmember.samaccountname)
     next
     
    objFile.Close
     
    function getGroupPath(byval GroupName)
         set cmd=createobject("ADODB.Command")
         set cn=createobject("ADODB.Connection")
         set rs=createobject("ADODB.Recordset")
         
        cn.open "Provider=ADsDSOObject;"
         
        cmd.commandtext = "SELECT adspath from 'LDAP://" & getnc & _
                   "' WHERE objectCategory = 'Group' and sAMAccountName = '" & groupname & "'"
         cmd.activeconnection = cn
         
        set rs = cmd.execute
         
        if rs.bof <> true and rs.eof<>true then
             getgrouppath=rs(0)
         else
             getgrouppath = ""
         end if
         cn.close
     
    end function
    function getNC
         set objRoot=getobject("LDAP://RootDSE")
         getNC=objRoot.get("defaultNamingContext")
     end function


    Fábio de Paula Junior

    • Marcado como Resposta RCirino segunda-feira, 16 de julho de 2012 21:19
    segunda-feira, 16 de julho de 2012 15:42
    Moderador

Todas as Respostas

  • Tente utilizar o que proponho neste link, se tiver alguma dificuldade retorne.

    3 Scripts pelo preço de 1 

    social.technet.microsoft.com/Forums/pt/scriptadminpt/thread/b6f08152-33a2-43cd-8688-5da5d9471fed

    O que eu fiz com strComputer você vai fazer com groupName.


    Fábio de Paula Junior

    segunda-feira, 16 de julho de 2012 14:11
    Moderador
  • Ola Fabio,

    Executei a linha de comando que vc propos, porém o script pede o nome do grupo e não lê o arquivo.

    segunda-feira, 16 de julho de 2012 14:45
  • Poste aqui como está seu script agora.

    Executar uma linha de comando é o último passo, vc tem alterar seu script também para que ele aceite parametros, está tudo naquel post.


    Fábio de Paula Junior


    segunda-feira, 16 de julho de 2012 14:55
    Moderador
  • Na verdade eu não mudei o script só rodei ele a partir da linha de comando coom voce citou no seu blog

    FOR /F %M IN (grupos.txt) DO cscript listagrupos.vbs %M

    Foi o que eu entendi

    segunda-feira, 16 de julho de 2012 15:00
  • Veja que lá tem um exemplo de script que não tem esta funcionalidade (como o seu) , eu modifico e então ele passa a aceitar parametros.

    Fábio de Paula Junior

    segunda-feira, 16 de julho de 2012 15:03
    Moderador
  • então, modifiquei o script porém quando executo ele parece que lê o arquivo, mas não grava nada. Veja como ficou o script. Logo abaixo tem a saida dele no prompt

    strGroupName="."
    if wscript.arguments.count>0 then strGroupName=wscript.arguments(0)
     
    'if groupName = "" then
     '    wscript.quit
     'end if
     
    groupPath = getgrouppath(groupName)
     
    if groupPath = "" then
         wscript.echo "Unable to find the specified group in the domain"
         wscript.quit
     end if
     
    set objGroup = getobject(grouppath)
     set objFSO = createobject("scripting.filesystemobject")
     set objFile = objFSO.createtextfile(FileName)
     
    objFile.WriteLine("sAMAccountName")
     for each objMember in objGroup.Members
         objFile.WriteLine(objmember.samaccountname)
     next
     
    objFile.Close
     
    function getGroupPath(byval GroupName)
         set cmd=createobject("ADODB.Command")
         set cn=createobject("ADODB.Connection")
         set rs=createobject("ADODB.Recordset")
        
        cn.open "Provider=ADsDSOObject;"
        
        cmd.commandtext = "SELECT adspath from 'LDAP://" & getnc & _
                   "' WHERE objectCategory = 'Group' and sAMAccountName = '" & groupname & "'"
         cmd.activeconnection = cn
        
        set rs = cmd.execute
        
        if rs.bof <> true and rs.eof<>true then
             getgrouppath=rs(0)
         else
             getgrouppath = ""
         end if
         cn.close
     
    end function

    function getNC
         set objRoot=getobject("LDAP://RootDSE")
         getNC=objRoot.get("defaultNamingContext")
     end function

    .

    segunda-feira, 16 de julho de 2012 15:17
  • Olha só vc inventou uma váriavel: strGroupName

    O parametro do seu script é o GroupName, no do exemplo que te passei é strComputer. Estas são as variaveis com a principal informação do script.

    Outra coisa, vc tirou a linha  FileName = groupName & ".txt", sem ela onde é que vc vai gravar a informação?

    Vc comentou um IF no inicio do script, veja que descomentei, ele é perfeito: Se não tiver parametro então sai do script.

    Outro erro, na primeira linha a variavel setada como ".", no caso do meu script ela é util porque se o cara não passar parametro então considera o computador local- que é representado por "." - no seu caso coloque ele como em branco ("").

    Não tenho ambiente pra testar seu script, tenta aí e me diga o resultado, de preferência com vc fez com prints.

    GroupName=""
    if wscript.arguments.count>0 then GroupName=wscript.arguments(0)
     
    if groupName = "" then
        wscript.quit
    end if
    
    FileName = groupName & ".txt"
    
    groupPath = getgrouppath(groupName)
     
    if groupPath = "" then
         wscript.echo "Unable to find the specified group in the domain"
         wscript.quit
     end if
     
    set objGroup = getobject(grouppath)
     set objFSO = createobject("scripting.filesystemobject")
     set objFile = objFSO.createtextfile(FileName)
     
    objFile.WriteLine("sAMAccountName")
     for each objMember in objGroup.Members
         objFile.WriteLine(objmember.samaccountname)
     next
     
    objFile.Close
     
    function getGroupPath(byval GroupName)
         set cmd=createobject("ADODB.Command")
         set cn=createobject("ADODB.Connection")
         set rs=createobject("ADODB.Recordset")
         
        cn.open "Provider=ADsDSOObject;"
         
        cmd.commandtext = "SELECT adspath from 'LDAP://" & getnc & _
                   "' WHERE objectCategory = 'Group' and sAMAccountName = '" & groupname & "'"
         cmd.activeconnection = cn
         
        set rs = cmd.execute
         
        if rs.bof <> true and rs.eof<>true then
             getgrouppath=rs(0)
         else
             getgrouppath = ""
         end if
         cn.close
     
    end function
    function getNC
         set objRoot=getobject("LDAP://RootDSE")
         getNC=objRoot.get("defaultNamingContext")
     end function


    Fábio de Paula Junior

    • Marcado como Resposta RCirino segunda-feira, 16 de julho de 2012 21:19
    segunda-feira, 16 de julho de 2012 15:42
    Moderador
  • esses grupos são do ad ou locais você pode tentar powershell é muito facil...
    se for AD roda isso no powershell como ADM

    import-module activedirectory

    para trazer todos
    Get-ADGroup -Filter * | %{$Grupo = $_.DistinguishedName ; echo "$Grupo" >> c:\$Grupo.txt  ; Get-ADGroupMember $Grupo | %{echo "$_.DistinguishedName" >> c:\$Grupo.txt } }

    Se quiser só o nome simples dos objetos use

    Get-ADGroup -Filter * | %{$Grupo = $_.Name ; echo "$Grupo" >> c:\$Grupo.txt  ; Get-ADGroupMember $Grupo | %{echo "$_.Name" >> c:\$Grupo.txt } }


    Meu Blog: http://howtoserver.com Minhas Ceritificações: 73-642,73-640


    segunda-feira, 16 de julho de 2012 16:34
  • kra tem como trazer os grupos de determinada OU apartir do poweshell ?

    Get-ADGroup -Filter * | %{$Grupo = $_.Name ; echo "$Grupo" >> c:\$Grupo.txt  ; Get-ADGroupMember $Grupo | %{echo "$_.Name" >> c:\$Grupo.txt } }

    quarta-feira, 15 de março de 2017 16:54