Usuário com melhor resposta
Mapear pasta na rede integrado as permissões do usuario no AD

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
:exitEu 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
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" thenscript.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
Todas as Respostas
-
-
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 -
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" thenscript.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
-