none
Mapear pasta na rede integrado as permissões do usuario no AD RRS feed

  • Pergunta

  • Olá pessoal,

    estou precisando de uma ajudinha... tenho um script que mapea uma pasta compartilhada na rede e cria um atalho do mapeamento para a area de trabalho do usuario. Meu ad é todo setorizado por OU e eu queria otimizar o script para ele identificar o usuario no ad, verificar qual permissao de pasta ele tem para acesso em "Membro de" no ad.... e logo depois mapear a pasta e criar o atalho. Estou colocando meu script em bat aki para melhorar a visualização:

    @echo off
    net use p: /delete
    net use p: \\salion\publico
    net use s: /delete
    net use s: \\salion\anop
    if exist "%userprofile%\desktop\PUBLICO em salion.lnk" goto fim
    copy "\\192.168.6.1\netlogon\Atalhos\PUBLICO em salion.lnk" "%userprofile%\desktop"
    :fim
    if exist "%userprofile%\desktop\ANOP em salion.lnk" goto exit
    copy "\\192.168.6.1\netlogon\Atalhos\ANOP em salion.lnk" "%userprofile%\desktop"
    net time \\srv /set /yes <- Sincroniza hora com servidor
    :exit

    Eu também criei uma pasta dentro de netlogon com o nome Atalhos, e dentro dela coloquei diversos atalhos *.lnk das pastas compartilhadas conde o script vai puxar os atalhos. Nesse script ele copia a pasta PUBLICO e a pasta do setor do usuario + como eu falei gostaria de saber se tem uma formar de quando o usuario logar o script verificar no ad em que pasta compartilhada ele tem acesso e mapear, criando o atalho na area de trabalho para o usuario.

     

    Espero ter sido claro no que estou tentando fazer...

    Gostaria de ajuda...


    Ricardo Barbosa - Security Officer - Especialista em Gestão da Segurança da Informação
    sexta-feira, 14 de janeiro de 2011 14:15

Respostas

  • Olá pessoal,

    achei uma solução ótima em vbs... o script mapeia os grupos que o usuario pertence no AD, verifica se tem a pasta compartilhada no servidor de arquivos e cria as pastas que o usuario tem permissão.

    -------------------------------------------------------SCRIPT---------------------------------------------

    Const E_ADS_PROPERTY_NOT_FOUND = &h8000500D


    Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
    'Set OutPutFile = FileSystem.CreateTextFile("Resultado da Lista de Grupos.txt", True)


    dim DomainString, UserString, WSHNetwork, WSHShell
    dim UserObj, GroupObj


    ON ERROR RESUME NEXT

    if ChkEngine = "cscript.exe" then

    script.echo VBCRLF
    end if

    Set WSHShell = WScript.CreateObject("WScript.Shell")
    Set WSHNetwork = WScript.CreateObject("WScript.Network")

    strTitle="Mostrar os Grupos do Usuário"

    'DomainString = InputBox("Entre com o nome do Domínio.",strTitle,WSHNetwork.UserDomain)'
    DomainString = WSHNetwork.UserDomain

    if DomainString="" then
    if ChkEngine = "cscript.exe" then
    wscript.echo "No domain specified or script cancelled."
    set WSHNetwork=Nothing
    wscript.quit
    else
    WSHShell.Popup "No domain specified or script cancelled.",-1,strTitle
    set WSHNetwork=Nothing
    wscript.quit
    end if
    end if

    'UserString = InputBox("Entre com o Username.",strTitle,WSHNetwork.UserName)'

    UserString = WSHNetwork.UserName

    if UserString="" then
    if ChkEngine = "cscript.exe" then
    wscript.echo "Nenhum usuário ou script cancelado."
    set WSHNetwork=Nothing
    wscript.quit
    else
    WSHShell.Popup "No user specified or script cancelled.",-1,strTitle
    set WSHNetwork=Nothing
    wscript.quit
    end if
    end if

    Set UserObj = GetObject("WinNT://" & DomainString & "/" & UserString)

    if err.number<>0 then
    if ChkEngine = "cscript.exe" then
    wscript.echo "Erro conectando ao " & DomainString & " ou usuário não encontrado."
    set WSHNetwork = Nothing
    set DomainString = Nothing
    set UserObj= Nothing
    wscript.quit
    else
    WSHShell.Popup "Error connecting to " & DomainString & " or user not found.",-1,strTitle
    set WSHNetwork = Nothing
    set DomainString = Nothing
    set UserObj= Nothing
    wscript.quit
    end if
    end if

    'List= "Group Membership for " & UserObj.Fullname & " (" & UserString & ") in " & UCASE(DomainString) & VBCRLF & VBCRLF'

    For Each GroupObj In UserObj.Groups
    if ( ( GroupObj.Name <> "Domain Admins" ) and (GroupObj.Name <> "Domain Users") and (GroupObj.Name <> "Administrators") and (GroupObj.Name <> "Account Operators") and (GroupObj.Name <> "Suporte") ) then
    List = List & GroupObj.Name & VBCRLF
    CriaAtalho(GroupObj.Name)

    end if
    Next

    'if ChkEngine = "cscript.exe" then
    'OutPutFile.WriteLine List

    'else
    'OutPutFile.WriteLine List

    'end if
    'OutPutFile.Close
    'WSCript.Echo "Script executado! Pressione OK"'

    set UserObj = Nothing
    set GroupObj = Nothing
    set WSHNetwork = Nothing
    set DomainString = Nothing
    set WSHSHell = Nothing
    set strTitle = Nothing

    wscript.quit

    '\\\\\\\\\\\\\\\\\\\\\\
    'ChkEngine Function
    '\\\\\\\\\\\\\\\\\\\\\\
    Function ChkEngine()

    ON ERROR RESUME NEXT

    strEngine=Wscript.FullName

    if Err.Number <>0 then
    wscript.echo "Error!"
    wscript.echo "Erro (" & Err.Number & ") Descrição: " & Err.Description
    wscript.quit
    end if

    PosX=InStrRev(strEngine,"\",-1,vbTextCompare)
    ChkEngine=Mid(strEngine,PosX+1)

    End Function

    Function CriaAtalho(pasta)

    strAppPath = "\\NOME DO FILESERVER\" & pasta

    Set objShell = CreateObject("WScript.Shell")
    objDesktop = objShell.SpecialFolders("Desktop")
    Set objLink = objShell.CreateShortcut(objDesktop & "\" & pasta & ".lnk")
    'Set objLink = objShell.CreateShortcut(objDesktop & "\sedoc.lnk")'

    objLink.TargetPath = strAppPath
    objLink.WindowStyle = 3
    objLink.Save


    End Function

    ---------------------------------------FINAL SCRIPT-------------------------------------------

     

    ATENÇÃO: Vc deve trocar o nome do FileServer colocar o nome do seu File Server e pronto.

     

    Abração Pessoal,

     


    Ricardo Barbosa- Security Officer - Especialista em Gestão da Segurança da Informação
    • Marcado como Resposta Ricardo Barbosa sexta-feira, 21 de janeiro de 2011 14:41
    sexta-feira, 21 de janeiro de 2011 14:38

Todas as Respostas

  • Boa noite,

     

    Creio que neste caso, você poderia criar uma .bat para cada departamento, depois as permissões vc gerencia pelas pastas ou grupos.

    Exemplo

    rh.bat

    financeiro.bat

    Qualquer coisa...estamos ai...

     

    att.

    sexta-feira, 14 de janeiro de 2011 20:33
  • Otávio,

    eu sei que posso fazer desse jeito + vai ser bem trabalhoso pois possuo varias OUs e muitas umas dentro das outras. Por Exemplo OU de uma Diretoria Administrativa e dentro os setores dela e os sub setores... e ainda existem usuarios que tem permissões diferentes do colega de setor.

    Por isso fica complicado e dessa forma iria automatizar totalmente o compartilhamento das pastas...


    Ricardo Barbosa - Security Officer - Especialista em Gestão da Segurança da Informação
    sábado, 15 de janeiro de 2011 13:22
  • Olá pessoal,

    achei uma solução ótima em vbs... o script mapeia os grupos que o usuario pertence no AD, verifica se tem a pasta compartilhada no servidor de arquivos e cria as pastas que o usuario tem permissão.

    -------------------------------------------------------SCRIPT---------------------------------------------

    Const E_ADS_PROPERTY_NOT_FOUND = &h8000500D


    Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
    'Set OutPutFile = FileSystem.CreateTextFile("Resultado da Lista de Grupos.txt", True)


    dim DomainString, UserString, WSHNetwork, WSHShell
    dim UserObj, GroupObj


    ON ERROR RESUME NEXT

    if ChkEngine = "cscript.exe" then

    script.echo VBCRLF
    end if

    Set WSHShell = WScript.CreateObject("WScript.Shell")
    Set WSHNetwork = WScript.CreateObject("WScript.Network")

    strTitle="Mostrar os Grupos do Usuário"

    'DomainString = InputBox("Entre com o nome do Domínio.",strTitle,WSHNetwork.UserDomain)'
    DomainString = WSHNetwork.UserDomain

    if DomainString="" then
    if ChkEngine = "cscript.exe" then
    wscript.echo "No domain specified or script cancelled."
    set WSHNetwork=Nothing
    wscript.quit
    else
    WSHShell.Popup "No domain specified or script cancelled.",-1,strTitle
    set WSHNetwork=Nothing
    wscript.quit
    end if
    end if

    'UserString = InputBox("Entre com o Username.",strTitle,WSHNetwork.UserName)'

    UserString = WSHNetwork.UserName

    if UserString="" then
    if ChkEngine = "cscript.exe" then
    wscript.echo "Nenhum usuário ou script cancelado."
    set WSHNetwork=Nothing
    wscript.quit
    else
    WSHShell.Popup "No user specified or script cancelled.",-1,strTitle
    set WSHNetwork=Nothing
    wscript.quit
    end if
    end if

    Set UserObj = GetObject("WinNT://" & DomainString & "/" & UserString)

    if err.number<>0 then
    if ChkEngine = "cscript.exe" then
    wscript.echo "Erro conectando ao " & DomainString & " ou usuário não encontrado."
    set WSHNetwork = Nothing
    set DomainString = Nothing
    set UserObj= Nothing
    wscript.quit
    else
    WSHShell.Popup "Error connecting to " & DomainString & " or user not found.",-1,strTitle
    set WSHNetwork = Nothing
    set DomainString = Nothing
    set UserObj= Nothing
    wscript.quit
    end if
    end if

    'List= "Group Membership for " & UserObj.Fullname & " (" & UserString & ") in " & UCASE(DomainString) & VBCRLF & VBCRLF'

    For Each GroupObj In UserObj.Groups
    if ( ( GroupObj.Name <> "Domain Admins" ) and (GroupObj.Name <> "Domain Users") and (GroupObj.Name <> "Administrators") and (GroupObj.Name <> "Account Operators") and (GroupObj.Name <> "Suporte") ) then
    List = List & GroupObj.Name & VBCRLF
    CriaAtalho(GroupObj.Name)

    end if
    Next

    'if ChkEngine = "cscript.exe" then
    'OutPutFile.WriteLine List

    'else
    'OutPutFile.WriteLine List

    'end if
    'OutPutFile.Close
    'WSCript.Echo "Script executado! Pressione OK"'

    set UserObj = Nothing
    set GroupObj = Nothing
    set WSHNetwork = Nothing
    set DomainString = Nothing
    set WSHSHell = Nothing
    set strTitle = Nothing

    wscript.quit

    '\\\\\\\\\\\\\\\\\\\\\\
    'ChkEngine Function
    '\\\\\\\\\\\\\\\\\\\\\\
    Function ChkEngine()

    ON ERROR RESUME NEXT

    strEngine=Wscript.FullName

    if Err.Number <>0 then
    wscript.echo "Error!"
    wscript.echo "Erro (" & Err.Number & ") Descrição: " & Err.Description
    wscript.quit
    end if

    PosX=InStrRev(strEngine,"\",-1,vbTextCompare)
    ChkEngine=Mid(strEngine,PosX+1)

    End Function

    Function CriaAtalho(pasta)

    strAppPath = "\\NOME DO FILESERVER\" & pasta

    Set objShell = CreateObject("WScript.Shell")
    objDesktop = objShell.SpecialFolders("Desktop")
    Set objLink = objShell.CreateShortcut(objDesktop & "\" & pasta & ".lnk")
    'Set objLink = objShell.CreateShortcut(objDesktop & "\sedoc.lnk")'

    objLink.TargetPath = strAppPath
    objLink.WindowStyle = 3
    objLink.Save


    End Function

    ---------------------------------------FINAL SCRIPT-------------------------------------------

     

    ATENÇÃO: Vc deve trocar o nome do FileServer colocar o nome do seu File Server e pronto.

     

    Abração Pessoal,

     


    Ricardo Barbosa- Security Officer - Especialista em Gestão da Segurança da Informação
    • Marcado como Resposta Ricardo Barbosa sexta-feira, 21 de janeiro de 2011 14:41
    sexta-feira, 21 de janeiro de 2011 14:38
  • Ricardo

    Você teria um script com a mesma funcionalidade só que sem criar os atalhos no desk?

    Sou leigo ainda em script e estou a procura de algo assim.

    quinta-feira, 26 de abril de 2012 11:37