locked
Programa para listar permissões de uma pasta. RRS feed

  • Pergunta

  • Pessoal,

    A Diretoria me pediu um relatório informando qual usuário tinha acesso a qual pasta. Alguém sabe se existe uma ferramenta que me dê esse relatório?

    Olhei no forum e vi algumas, mas nenhuma me atende por completo, pois exibe as pastas e os grupos que aquela pasta possui.

    Como aqui existe grupos de grupos, então será trabalhoso ir descendo a árvore para encontrar o usuário.

    Alguém sabe se existe alguma ferramenta que leia a pasta, o grupo e os usuários tudo de uma só vez?

    segunda-feira, 18 de junho de 2012 14:23

Respostas

  • Segue:

    *Extrai permissões de pastas

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set WshShell=CreateObject("Wscript.Shell")
    strLog = "log.txt"

    'caminho da pasta que irá varrer
    Set objFolder = objFSO.GetFolder("Caminho da pasta")

    'quantidade maxima de niveis
    strMaxLog = 3


    Set objLogFile = objFSO.OpenTextFile(strLog, 8, True, 0)

    BuscaPasta objFolder
    objLogFile.Close

    Sub BuscaPasta(objeto)

    Set colSubfolders = objeto.Subfolders

    For Each objSubfolder in colSubfolders
       arrTipos = split(objSubFolder.Path,"\")
       if UBOUND(arrTipos) <= strMaxLog Then
          Set objExec = WshShell.Exec("showacls " & """" & objSubFolder.Path & """")
          strText =   VBCRLF
          strText = strText & "===================================================" & VBCRLF
          strText = strText & "===================================================" & VBCRLF
          objLogFile.WriteLine strText
          strResults = LCase(objExec.StdOut.ReadAll)
          objLogFile.WriteLine strResults
          buscaPasta objSubFolder
       End if
    Next


    End Sub

    *Extrai membros de grupos

    On Error Resume Next

    Diretorio= "Caminho para gravar arquivo"

    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 "Membros do grupo exportados!!!"
    wscript.quit

    • Marcado como Resposta Richard Juhasz quinta-feira, 21 de junho de 2012 16:37
    quarta-feira, 20 de junho de 2012 12:17

Todas as Respostas

  • Maddruga, isto pode ser feito através de script .vbs, migre sua thread para o forum de Script Administrativos que com certeza alguém vai te ajudar. Eu tenho dois scripts que fazem o que vc quer, mas separados, um lista o grupos e o outro extrai os membros dos grupos, mas como quer td junto não consigo te ajudar pois não sou expert em scritps..
    terça-feira, 19 de junho de 2012 11:20
  • Obrigado pela resposta Marco.

    Vou migrar a pergunta para lá, mas se vc pudesse me enviar os scripts eu agradeceria.

    De repente usando os dois eu consigo chegar no resultado que desejo.

    quarta-feira, 20 de junho de 2012 11:29
  • Segue:

    *Extrai permissões de pastas

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set WshShell=CreateObject("Wscript.Shell")
    strLog = "log.txt"

    'caminho da pasta que irá varrer
    Set objFolder = objFSO.GetFolder("Caminho da pasta")

    'quantidade maxima de niveis
    strMaxLog = 3


    Set objLogFile = objFSO.OpenTextFile(strLog, 8, True, 0)

    BuscaPasta objFolder
    objLogFile.Close

    Sub BuscaPasta(objeto)

    Set colSubfolders = objeto.Subfolders

    For Each objSubfolder in colSubfolders
       arrTipos = split(objSubFolder.Path,"\")
       if UBOUND(arrTipos) <= strMaxLog Then
          Set objExec = WshShell.Exec("showacls " & """" & objSubFolder.Path & """")
          strText =   VBCRLF
          strText = strText & "===================================================" & VBCRLF
          strText = strText & "===================================================" & VBCRLF
          objLogFile.WriteLine strText
          strResults = LCase(objExec.StdOut.ReadAll)
          objLogFile.WriteLine strResults
          buscaPasta objSubFolder
       End if
    Next


    End Sub

    *Extrai membros de grupos

    On Error Resume Next

    Diretorio= "Caminho para gravar arquivo"

    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 "Membros do grupo exportados!!!"
    wscript.quit

    • Marcado como Resposta Richard Juhasz quinta-feira, 21 de junho de 2012 16:37
    quarta-feira, 20 de junho de 2012 12:17
  • cara ta dando erro de compilação no primeiro script...

    linha 2

    Caract.:1

    Erro: Instrução Inesperada

    Codigo: 800A0400

    Origem: Erro de compilação do Microsoft VBSicrpt 

    sábado, 1 de setembro de 2012 15:52
  • Remova os comentários

    - *Extrai permissões de pastas

    - *Extrai membros de grupos

    Faz o teste.

    domingo, 7 de julho de 2013 20:07