none
Grupos vazios RRS feed

  • Pergunta

  • Boa tarde a todos,

    Gostaria de saber como posso efetuar uma consulta no AD para lista todos os grupos que estão vazios. E se depois tem algum problema eu deletar estes grupos.

    Grato

    Diniz

    segunda-feira, 16 de novembro de 2009 16:56

Respostas

  • Olá,

    Fiz umas alterações para listar apenas os grupos cujo a guia member está vazio:

    Const ADS_SCOPE_SUBTREE = 2

    Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
    Set objDSE = GetObject("LDAP://rootDSE")
    Set OutPutFile = FileSystem.CreateTextFile("Lista_de_Grupos.txt", True)

    strDominio = objDSE.Get("defaultNamingContext")

    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") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    objCommand.CommandText = _
        "SELECT name,description,distinguishedname,instanceType FROM 'LDAP://" & strDominio & "' WHERE objectCategory='group'" 

    Set objRecordSet = objCommand.Execute

    objRecordSet.MoveFirst

    Do Until objRecordSet.EOF
        nome = objRecordSet.Fields("name").Value
        descricao = objRecordSet.Fields("description").Value
        cn = objRecordSet.Fields("distinguishedname").Value
        pegaGrupo cn
        objRecordSet.MoveNext
    Loop



    Function pegaGrupo(nomegrupo)

    on error resume next



    Set objGroup = GetObject("LDAP://" & nomegrupo)
    objGroup.GetInfo

    arrMemberOf = objGroup.GetEx("member")
    nQtdGrupo = 0

    For Each strMember in arrMemberOf
       if Len(strMember) > 0 Then
          nQtdGrupo = nQtdGrupo + 1
       End if

    Next
    if nQtdGrupo = 0 Then
       OutPutFile.WriteLine nome & ";" & cn
    End if

    End Function


    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    • Marcado como Resposta diniz terça-feira, 17 de novembro de 2009 11:16
    segunda-feira, 16 de novembro de 2009 19:00

Todas as Respostas

  • Olá,

    Se for um grupo criado por você não teria problemas.... Os grupos padrões, pode ser que ao ativar algum serviço você precise deles.

    Segue abaixo um script que gera um arquivo txt com os membros de cada grupo:

    Const ADS_SCOPE_SUBTREE = 2

    Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
    Set objDSE = GetObject("LDAP://rootDSE")
    Set OutPutFile = FileSystem.CreateTextFile("Lista_de_Grupos.txt", True)

    strDominio = objDSE.Get("defaultNamingContext")

    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") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    objCommand.CommandText = _
        "SELECT name,description,distinguishedname,instanceType FROM 'LDAP://" & strDominio & "' WHERE objectCategory='group'" 

    Set objRecordSet = objCommand.Execute

    objRecordSet.MoveFirst

    Do Until objRecordSet.EOF
        nome = objRecordSet.Fields("name").Value
        descricao = objRecordSet.Fields("description").Value
        cn = objRecordSet.Fields("distinguishedname").Value
        OutPutFile.WriteLine nome & ";" & cn
        pegaGrupo cn
        objRecordSet.MoveNext
    Loop



    Function pegaGrupo(nomegrupo)

    on error resume next



    Set objGroup = GetObject("LDAP://" & nomegrupo)
    objGroup.GetInfo

    arrMemberOf = objGroup.GetEx("member")

    OutPutFile.WriteLine "============= MEMBROS DO GRUPO " & nome & " ================"
    For Each strMember in arrMemberOf
       OutPutFile.WriteLine strMember
    Next

    OutPutFile.WriteLine " "

    End Function



    Até mais,

    Jesiel

    Obs.: Se útil, classifique

    segunda-feira, 16 de novembro de 2009 17:24
  • Boa tarde Jesiel,

    Este script esta funcionando, mais o que eu estou querendo e ao contrario, que ele mostre os grupos que estão vazios.


    Grato

    Diniz
    segunda-feira, 16 de novembro de 2009 17:36
  • Olá,

    Fiz umas alterações para listar apenas os grupos cujo a guia member está vazio:

    Const ADS_SCOPE_SUBTREE = 2

    Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
    Set objDSE = GetObject("LDAP://rootDSE")
    Set OutPutFile = FileSystem.CreateTextFile("Lista_de_Grupos.txt", True)

    strDominio = objDSE.Get("defaultNamingContext")

    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") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    objCommand.CommandText = _
        "SELECT name,description,distinguishedname,instanceType FROM 'LDAP://" & strDominio & "' WHERE objectCategory='group'" 

    Set objRecordSet = objCommand.Execute

    objRecordSet.MoveFirst

    Do Until objRecordSet.EOF
        nome = objRecordSet.Fields("name").Value
        descricao = objRecordSet.Fields("description").Value
        cn = objRecordSet.Fields("distinguishedname").Value
        pegaGrupo cn
        objRecordSet.MoveNext
    Loop



    Function pegaGrupo(nomegrupo)

    on error resume next



    Set objGroup = GetObject("LDAP://" & nomegrupo)
    objGroup.GetInfo

    arrMemberOf = objGroup.GetEx("member")
    nQtdGrupo = 0

    For Each strMember in arrMemberOf
       if Len(strMember) > 0 Then
          nQtdGrupo = nQtdGrupo + 1
       End if

    Next
    if nQtdGrupo = 0 Then
       OutPutFile.WriteLine nome & ";" & cn
    End if

    End Function


    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    • Marcado como Resposta diniz terça-feira, 17 de novembro de 2009 11:16
    segunda-feira, 16 de novembro de 2009 19:00
  • Perfeito Jesiel .... muito obrigado

    Diniz
    terça-feira, 17 de novembro de 2009 11:17