none
Script VBS para listar o "nome de logon" dos membros de um grupo do AD RRS feed

  • Pergunta

  • Boa tarde !

    encontrei na internet um script vbs que me lista o nome de todos os membros de um grupo do AD e grava em um arquivo .txt, o que faço para esse script me listar o "nome de logon" de cada membro do grupo ?

    poderiam me ajudar, por favor !

    desde já muito obrigado.

    segue o script !

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

    On Error Resume Next

    Diretorio= "c:\grupos"

    grupo= "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  
    terça-feira, 31 de outubro de 2017 18:25

Respostas

  • Gabriel,

    Bom dia,

    acabei encontrando um script PowerShell que resolveu meu problema, segue o script.

    Get-ADGroupMember -Identity nomedogrupo | ft SamAccountName -AutoSize |Out-File c:\list.txt

    muito obrigado pela ajuda !

    sexta-feira, 10 de novembro de 2017 12:16

Todas as Respostas

  • Leandro, Bom dia.

    Teste este script, ele vai listar todos os grupos do AD e seus respectivos membros(um abaixo do outro) com Nome e SAN, so altere a linha MY_DOMAIN com seu dominio e pronto, o objeto que recupera o SAN dos usuarios é o objMember.sAMAccountName.

    On Error Resume Next
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objtextfile = objFSO.deleteFile("GruposAd.CSV")
    Set objtextfile = objFSO.CreateTextFile("GruposAd.CSV", Forwritting)
    Const ADS_SCOPE_SUBTREE = 8
    Const MY_DOMAIN = "DC=DOMINIO,DC=COM" 
    Const ADS_GROUP_TYPE_GLOBAL_GROUP = &h2 
    Const ADS_GROUP_TYPE_LOCAL_GROUP = &h4 
    Const ADS_GROUP_TYPE_UNIVERSAL_GROUP = &h8 
    Const ADS_GROUP_TYPE_SECURITY_ENABLED = &h80000000 
    Const E_ADS_PROPERTY_NOT_FOUND = &h8000500D 

    ' Get a recordset of groups in AD 
    Set objConnection = CreateObject("ADODB.Connection") 
    Set objCommand =   CreateObject("ADODB.Command") 
    objConnection.Provider = "ADsDSOObject" 
    objConnection.Open "Active Directory Provider" 
    Set objCommand.ActiveConnection = objConnection 
    objCommand.Properties("Page Size") = 10000 
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE  
    objCommand.CommandText = _ 
        "SELECT ADsPath, Name FROM 'LDAP://" & MY_DOMAIN & "' WHERE objectCategory='group'"  
    Set objRecordSet = objCommand.Execute 
    objRecordSet.MoveFirst 
     
    ' For each Group, Get group properties 
    Do Until objRecordSet.EOF 
      Set objGroup = GetObject(objRecordSet.Fields("ADsPath").Value) 
      strGroupName = objRecordSet.Fields("Name").Value 
      If objGroup.GroupType AND ADS_GROUP_TYPE_LOCAL_GROUP Then 
        strGroupDesc = "Domain local " 
      ElseIf objGroup.GroupType AND ADS_GROUP_TYPE_GLOBAL_GROUP Then 
        strGroupDesc = "Global " 
      ElseIf objGroup.GroupType AND ADS_GROUP_TYPE_UNIVERSAL_GROUP Then 
        strGroupDesc = "Universal " 
      Else 
        strGroupDesc = "Unknown " 
      End If 
      If objGroup.GroupType AND ADS_GROUP_TYPE_SECURITY_ENABLED Then 
        TipoGrupo = "Security group" 
      Else 
        tipoGrupo = "Distribution group" 
      End If 
     
      ' Check if there are members 
      err.clear 
      arrMemberOf = objGroup.GetEx("Member") 
      If Err.Number = E_ADS_PROPERTY_NOT_FOUND then 
        ' Write a line to the outputfile with group properties and no members 
        objtextfile.WriteLine(strGroupName & ";" & strGroupDesc & ";" & "<null>" & ";" & "<null>") 
      Else 
        ' For each group member, get member properties 
        For Each strMemberOf in arrMemberOf 
          Set objMember = GetObject("LDAP://" & strMemberOf) 
          strMemberName = right(objMember.Name,len(objMember.Name)-3) 
          ' Write a line to the outputfile with group and member properties 
          objtextfile.WriteLine(strGroupName & ";" & strGroupDesc & ";" & tipoGrupo & ";"  & strMemberName & ";"  & objMember.sAMAccountName) 
          set objMember = nothing 
        Next 
      End If 
      objRecordSet.MoveNext 
      Set objGroup = nothing 
    Loop 
    objtextfile.close 
    wscript.echo "Done!"

    quarta-feira, 1 de novembro de 2017 13:03
  • Leandro, Bom dia.

    Teste este script, ele vai listar todos os grupos do AD e seus respectivos membros(um abaixo do outro) com Nome e SAN, so altere a linha MY_DOMAIN com seu dominio e pronto, o objeto que recupera o SAN dos usuarios é o objMember.sAMAccountName.

    On Error Resume Next
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objtextfile = objFSO.deleteFile("GruposAd.CSV")
    Set objtextfile = objFSO.CreateTextFile("GruposAd.CSV", Forwritting)
    Const ADS_SCOPE_SUBTREE = 8
    Const MY_DOMAIN = "DC=DOMINIO,DC=COM" 
    Const ADS_GROUP_TYPE_GLOBAL_GROUP = &h2 
    Const ADS_GROUP_TYPE_LOCAL_GROUP = &h4 
    Const ADS_GROUP_TYPE_UNIVERSAL_GROUP = &h8 
    Const ADS_GROUP_TYPE_SECURITY_ENABLED = &h80000000 
    Const E_ADS_PROPERTY_NOT_FOUND = &h8000500D 

    ' Get a recordset of groups in AD 
    Set objConnection = CreateObject("ADODB.Connection") 
    Set objCommand =   CreateObject("ADODB.Command") 
    objConnection.Provider = "ADsDSOObject" 
    objConnection.Open "Active Directory Provider" 
    Set objCommand.ActiveConnection = objConnection 
    objCommand.Properties("Page Size") = 10000 
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE  
    objCommand.CommandText = _ 
        "SELECT ADsPath, Name FROM 'LDAP://" & MY_DOMAIN & "' WHERE objectCategory='group'"  
    Set objRecordSet = objCommand.Execute 
    objRecordSet.MoveFirst 
     
    ' For each Group, Get group properties 
    Do Until objRecordSet.EOF 
      Set objGroup = GetObject(objRecordSet.Fields("ADsPath").Value) 
      strGroupName = objRecordSet.Fields("Name").Value 
      If objGroup.GroupType AND ADS_GROUP_TYPE_LOCAL_GROUP Then 
        strGroupDesc = "Domain local " 
      ElseIf objGroup.GroupType AND ADS_GROUP_TYPE_GLOBAL_GROUP Then 
        strGroupDesc = "Global " 
      ElseIf objGroup.GroupType AND ADS_GROUP_TYPE_UNIVERSAL_GROUP Then 
        strGroupDesc = "Universal " 
      Else 
        strGroupDesc = "Unknown " 
      End If 
      If objGroup.GroupType AND ADS_GROUP_TYPE_SECURITY_ENABLED Then 
        TipoGrupo = "Security group" 
      Else 
        tipoGrupo = "Distribution group" 
      End If 
     
      ' Check if there are members 
      err.clear 
      arrMemberOf = objGroup.GetEx("Member") 
      If Err.Number = E_ADS_PROPERTY_NOT_FOUND then 
        ' Write a line to the outputfile with group properties and no members 
        objtextfile.WriteLine(strGroupName & ";" & strGroupDesc & ";" & "<null>" & ";" & "<null>") 
      Else 
        ' For each group member, get member properties 
        For Each strMemberOf in arrMemberOf 
          Set objMember = GetObject("LDAP://" & strMemberOf) 
          strMemberName = right(objMember.Name,len(objMember.Name)-3) 
          ' Write a line to the outputfile with group and member properties 
          objtextfile.WriteLine(strGroupName & ";" & strGroupDesc & ";" & tipoGrupo & ";"  & strMemberName & ";"  & objMember.sAMAccountName) 
          set objMember = nothing 
        Next 
      End If 
      objRecordSet.MoveNext 
      Set objGroup = nothing 
    Loop 
    objtextfile.close 
    wscript.echo "Done!"

    Aonde voce rodar o script ele ira salvar um arquivo chamado GruposAD.CSV.
    quarta-feira, 1 de novembro de 2017 13:04
  • Gabriel,

    Boa tarde,

    muito obrigado por responder,

    o script que você me passou retorna todos os grupos do AD ?

    O meu AD tem mais de 500 grupos, vai me retornar muita informação.

    o script que eu postei quase faz o que eu preciso, eu informo o nome do grupo e ele cria um arquivo .csv ou .txt com o nome de cada membro do grupo, só que eu preciso do login de rede de cada membro e não o nome do usuário.

    Exemplo:

    o nome do usuário é "Gustavo Pereira"

    o login do usuário é "gpereira"

    o script me retorna o "Gustavo Pereira" e eu preciso do "gpereira"

    o objeto que você me informou que retorna o que eu quero também está no meu script conforme a linha abaixo, sabe me informar se o objeto retorna o login do usuário mesmo ?

    LDAPStr = "<LDAP://" & DomainContainer & ">;(&(objectclass=group)(objectCategory=group)(samaccountname=" & grupo & "));adspath;subtree"

    essa é uma unica linha é que no post tem uma quebra automática

    sabe como posso alterar o script para me retornar o que eu preciso ?

    desde já o meu muito obrigado ! 

    quarta-feira, 1 de novembro de 2017 18:16
  • Leandro, eu nao testei o seu script mas tente alterar esta linha para .

    Spmember = Split(strMember, ",", objMember.sAMAccountName,",")

    Porem para apenas um grupo voce pode usar o net group 


    quarta-feira, 1 de novembro de 2017 20:16
  • Gabriel,

    Bom dia,

    fiz a alteração, o script gera o arquivo mas não escreve nada nele, quando volto ao que era antes ele me lista o nome de cada membro do grupo.

    poderia testar o script que postei ?  

    sexta-feira, 3 de novembro de 2017 10:39
  • Vou validar e alterar, mas como disse leandro para listar um unico grupo o Net group ira retornar o que deseja
    sexta-feira, 3 de novembro de 2017 15:23
  • Gabriel,

    Bom dia,

    acabei encontrando um script PowerShell que resolveu meu problema, segue o script.

    Get-ADGroupMember -Identity nomedogrupo | ft SamAccountName -AutoSize |Out-File c:\list.txt

    muito obrigado pela ajuda !

    sexta-feira, 10 de novembro de 2017 12:16
  • Beleza é isso ai, marque como resposta o seu post para que ele seja fechado por favor.
    sexta-feira, 10 de novembro de 2017 18:05