none
Como usar Icacls com VBS RRS feed

  • Pergunta

  • Pessoal,

    Estou tentando criar um script vbs para alterar permissões em algumas pastas utilizando o Icacls.

    Via Prompt, o comando funciona perfeitamente, mas ao usar o VBS, nada feito.

    Poderiam me ajudar?

    Comando prompt:

    icacls "C:\teste\teste_perm" /grant "Everyone":(OI)(CI)F

    Script VBS:

    set wshshell = wscript.createobject("wscript.shell")

    wshshell.run(icacls "C:\teste\teste_perm" /grant "todos":(OI)(CI)F)

    Abs


    terça-feira, 22 de setembro de 2015 14:45

Respostas

  • Rafael,

    Usei recentemente usei um script que encontrei aqui mesmo no forum e possível você analisar como é feito neste script para modificar o seu.

    Option Explicit
    on error resume next
    
    Dim objDSE, strDefaultDN, strDN, objContainer,objChild,objUser
    Dim strCaminho,strPasta,strGrupoLer,strGrupoMod,strGrupoFull
    Dim strFolder,WshShell,WshNetwork,objGroup
    
    Set objDSE = GetObject("LDAP://rootDSE")
    strDefaultDN = "CN=Users," & objDSE.Get("defaultNamingContext")
    
    strDN =     InputBox("Coloque o Distinguished Name do Objeto" & _
        vbCrLf & "(Exemplo: " & strDefaultDN & ")", , strDefaultDN)
    
    If strDN = "" Then WScript.Quit(1)        
    
    strGrupoLer = InputBox("Coloque o nome do Grupo para Permissão de Leitura" & _
        vbCrLf & "(Ex.:  " & "Dominio\GrupoA" & ")", , "GrupoA")
    
    If strGrupoLer = "" Then WScript.Quit(1)   
    
    CreateGrupo strGrupoLer,strDN
    
    strGrupoMod = InputBox("Coloque o nome do Grupo para Permissão de Modificar" & _
        vbCrLf & "(Ex.:  " & "Dominio\GrupoB" & ")", , "GrupoB")
    
    If strGrupoMod = "" Then WScript.Quit(1)   
    
    CreateGrupo strGrupoMod, strDN
    
    
    strCaminho = InputBox("Coloque o Caminho da Pasta" & _
        vbCrLf & "(Ex.:  " & "C:\pasta" & ")", , "C:\Pasta")
    
    If strCaminho = "" Then WScript.Quit(1)   
    
    strPasta = InputBox("Coloque o nome da Pasta" & _
        vbCrLf & "(Ex.:  " & "Pasta" & ")", , "Pasta")
    
    If strPasta= "" Then WScript.Quit(1)   
    
    Set strFolder = CreateObject("Scripting.FileSystemObject")
    Set WshNetwork = WScript.CreateObject("WScript.Network")
    Set WshShell=CreateObject("Wscript.Shell")
    
    If strFolder.FolderExists (strCaminho & "\" & strPasta) = False Then
       strFolder.CreateFolder (strCaminho & "\" & strPasta)
    End If
    
    
    WshShell.Run "CACLS " & strCaminho & "\" & strPasta & " /E /c /G "& strGrupoLer  &":R"
    WshShell.Run "CACLS " & strCaminho & "\" & strPasta & " /E /c /G "& strGrupoMod  &":C"
    WshShell.Run "CACLS " & strCaminho & "\" & strPasta & " /E /c /G "& strGrupoFull  &":F"
    
    Function CreateGrupo(nome,strDN)
    
    Set objContainer = GetObject("LDAP://" & strDN)
    
    Set objGroup = objContainer.Create("Group", "cn="& nome)
    objGroup.put "name",nome
    objGroup.put "SamAccountName", nome
    objGroup.put "description",nome
    objGroup.setinfo
    
    End Function

    • Marcado como Resposta Rafael L. Furlan terça-feira, 22 de setembro de 2015 18:05
    terça-feira, 22 de setembro de 2015 15:20
  • Opa!

    Segue exemplo, removi o inputbox e coloquei caminho fixo é só vc alterar o caminho que esta entre aspas

    strCaminho = "C:\pasta\fixa"

    Option Explicit
    on error resume next
    
    Dim objDSE, strDefaultDN, strDN, objContainer,objChild,objUser
    Dim strCaminho,strPasta,strGrupoLer,strGrupoMod,strGrupoFull
    Dim strFolder,WshShell,WshNetwork,objGroup
    
    Set objDSE = GetObject("LDAP://rootDSE")
    strDefaultDN = "CN=Users," & objDSE.Get("defaultNamingContext")
    
    strDN =     InputBox("Coloque o Distinguished Name do Objeto" & _
        vbCrLf & "(Exemplo: " & strDefaultDN & ")", , strDefaultDN)
    
    If strDN = "" Then WScript.Quit(1)        
    
    strGrupoLer = InputBox("Coloque o nome do Grupo para Permissão de Leitura" & _
        vbCrLf & "(Ex.:  " & "Dominio\GrupoA" & ")", , "GrupoA")
    
    If strGrupoLer = "" Then WScript.Quit(1)   
    
    CreateGrupo strGrupoLer,strDN
    
    strGrupoMod = InputBox("Coloque o nome do Grupo para Permissão de Modificar" & _
        vbCrLf & "(Ex.:  " & "Dominio\GrupoB" & ")", , "GrupoB")
    
    If strGrupoMod = "" Then WScript.Quit(1)   
    
    CreateGrupo strGrupoMod, strDN
    
    
    strCaminho = "C:\pasta\fixa"
    
    If strCaminho = "" Then WScript.Quit(1)   
    
    strPasta = InputBox("Coloque o nome da Pasta" & _
        vbCrLf & "(Ex.:  " & "Pasta" & ")", , "Pasta")
    
    If strPasta= "" Then WScript.Quit(1)   
    
    Set strFolder = CreateObject("Scripting.FileSystemObject")
    Set WshNetwork = WScript.CreateObject("WScript.Network")
    Set WshShell=CreateObject("Wscript.Shell")
    
    If strFolder.FolderExists (strCaminho & "\" & strPasta) = False Then
       strFolder.CreateFolder (strCaminho & "\" & strPasta)
    End If
    
    
    WshShell.Run "CACLS " & strCaminho & "\" & strPasta & " /E /c /G "& strGrupoLer  &":R"
    WshShell.Run "CACLS " & strCaminho & "\" & strPasta & " /E /c /G "& strGrupoMod  &":C"
    WshShell.Run "CACLS " & strCaminho & "\" & strPasta & " /E /c /G "& strGrupoFull  &":F"
    
    Function CreateGrupo(nome,strDN)
    
    Set objContainer = GetObject("LDAP://" & strDN)
    
    Set objGroup = objContainer.Create("Group", "cn="& nome)
    objGroup.put "name",nome
    objGroup.put "SamAccountName", nome
    objGroup.put "description",nome
    objGroup.setinfo
    
    End Function
    Se te ajudou marca como resposta e se possível vota como útil


    • Marcado como Resposta Rafael L. Furlan terça-feira, 22 de setembro de 2015 18:05
    • Editado Carlos_rodrigues terça-feira, 22 de setembro de 2015 18:09 correção
    terça-feira, 22 de setembro de 2015 18:02

Todas as Respostas

  • Rafael,

    Usei recentemente usei um script que encontrei aqui mesmo no forum e possível você analisar como é feito neste script para modificar o seu.

    Option Explicit
    on error resume next
    
    Dim objDSE, strDefaultDN, strDN, objContainer,objChild,objUser
    Dim strCaminho,strPasta,strGrupoLer,strGrupoMod,strGrupoFull
    Dim strFolder,WshShell,WshNetwork,objGroup
    
    Set objDSE = GetObject("LDAP://rootDSE")
    strDefaultDN = "CN=Users," & objDSE.Get("defaultNamingContext")
    
    strDN =     InputBox("Coloque o Distinguished Name do Objeto" & _
        vbCrLf & "(Exemplo: " & strDefaultDN & ")", , strDefaultDN)
    
    If strDN = "" Then WScript.Quit(1)        
    
    strGrupoLer = InputBox("Coloque o nome do Grupo para Permissão de Leitura" & _
        vbCrLf & "(Ex.:  " & "Dominio\GrupoA" & ")", , "GrupoA")
    
    If strGrupoLer = "" Then WScript.Quit(1)   
    
    CreateGrupo strGrupoLer,strDN
    
    strGrupoMod = InputBox("Coloque o nome do Grupo para Permissão de Modificar" & _
        vbCrLf & "(Ex.:  " & "Dominio\GrupoB" & ")", , "GrupoB")
    
    If strGrupoMod = "" Then WScript.Quit(1)   
    
    CreateGrupo strGrupoMod, strDN
    
    
    strCaminho = InputBox("Coloque o Caminho da Pasta" & _
        vbCrLf & "(Ex.:  " & "C:\pasta" & ")", , "C:\Pasta")
    
    If strCaminho = "" Then WScript.Quit(1)   
    
    strPasta = InputBox("Coloque o nome da Pasta" & _
        vbCrLf & "(Ex.:  " & "Pasta" & ")", , "Pasta")
    
    If strPasta= "" Then WScript.Quit(1)   
    
    Set strFolder = CreateObject("Scripting.FileSystemObject")
    Set WshNetwork = WScript.CreateObject("WScript.Network")
    Set WshShell=CreateObject("Wscript.Shell")
    
    If strFolder.FolderExists (strCaminho & "\" & strPasta) = False Then
       strFolder.CreateFolder (strCaminho & "\" & strPasta)
    End If
    
    
    WshShell.Run "CACLS " & strCaminho & "\" & strPasta & " /E /c /G "& strGrupoLer  &":R"
    WshShell.Run "CACLS " & strCaminho & "\" & strPasta & " /E /c /G "& strGrupoMod  &":C"
    WshShell.Run "CACLS " & strCaminho & "\" & strPasta & " /E /c /G "& strGrupoFull  &":F"
    
    Function CreateGrupo(nome,strDN)
    
    Set objContainer = GetObject("LDAP://" & strDN)
    
    Set objGroup = objContainer.Create("Group", "cn="& nome)
    objGroup.put "name",nome
    objGroup.put "SamAccountName", nome
    objGroup.put "description",nome
    objGroup.setinfo
    
    End Function

    • Marcado como Resposta Rafael L. Furlan terça-feira, 22 de setembro de 2015 18:05
    terça-feira, 22 de setembro de 2015 15:20
  • Carlos,

    O Script funcionou perfeito. Até para o que eu queria a mais e não havia perguntado (solicitar informação para o usuário).

    Mas me desculpe a pergunta estúpida (sou novo nisso), como faço para utilizar um caminho de pasta fixo? 

    É que preciso alterar em um certo período do mês algumas permissões em pastas especificas. Os usuários até certa data podem gravar nessa pasta e após a gravação é bloqueada, só permitindo a leitura dos dados.

    Consigo fazer isso no prompt, mas não no VBS.

    terça-feira, 22 de setembro de 2015 17:54
  • Opa!

    Segue exemplo, removi o inputbox e coloquei caminho fixo é só vc alterar o caminho que esta entre aspas

    strCaminho = "C:\pasta\fixa"

    Option Explicit
    on error resume next
    
    Dim objDSE, strDefaultDN, strDN, objContainer,objChild,objUser
    Dim strCaminho,strPasta,strGrupoLer,strGrupoMod,strGrupoFull
    Dim strFolder,WshShell,WshNetwork,objGroup
    
    Set objDSE = GetObject("LDAP://rootDSE")
    strDefaultDN = "CN=Users," & objDSE.Get("defaultNamingContext")
    
    strDN =     InputBox("Coloque o Distinguished Name do Objeto" & _
        vbCrLf & "(Exemplo: " & strDefaultDN & ")", , strDefaultDN)
    
    If strDN = "" Then WScript.Quit(1)        
    
    strGrupoLer = InputBox("Coloque o nome do Grupo para Permissão de Leitura" & _
        vbCrLf & "(Ex.:  " & "Dominio\GrupoA" & ")", , "GrupoA")
    
    If strGrupoLer = "" Then WScript.Quit(1)   
    
    CreateGrupo strGrupoLer,strDN
    
    strGrupoMod = InputBox("Coloque o nome do Grupo para Permissão de Modificar" & _
        vbCrLf & "(Ex.:  " & "Dominio\GrupoB" & ")", , "GrupoB")
    
    If strGrupoMod = "" Then WScript.Quit(1)   
    
    CreateGrupo strGrupoMod, strDN
    
    
    strCaminho = "C:\pasta\fixa"
    
    If strCaminho = "" Then WScript.Quit(1)   
    
    strPasta = InputBox("Coloque o nome da Pasta" & _
        vbCrLf & "(Ex.:  " & "Pasta" & ")", , "Pasta")
    
    If strPasta= "" Then WScript.Quit(1)   
    
    Set strFolder = CreateObject("Scripting.FileSystemObject")
    Set WshNetwork = WScript.CreateObject("WScript.Network")
    Set WshShell=CreateObject("Wscript.Shell")
    
    If strFolder.FolderExists (strCaminho & "\" & strPasta) = False Then
       strFolder.CreateFolder (strCaminho & "\" & strPasta)
    End If
    
    
    WshShell.Run "CACLS " & strCaminho & "\" & strPasta & " /E /c /G "& strGrupoLer  &":R"
    WshShell.Run "CACLS " & strCaminho & "\" & strPasta & " /E /c /G "& strGrupoMod  &":C"
    WshShell.Run "CACLS " & strCaminho & "\" & strPasta & " /E /c /G "& strGrupoFull  &":F"
    
    Function CreateGrupo(nome,strDN)
    
    Set objContainer = GetObject("LDAP://" & strDN)
    
    Set objGroup = objContainer.Create("Group", "cn="& nome)
    objGroup.put "name",nome
    objGroup.put "SamAccountName", nome
    objGroup.put "description",nome
    objGroup.setinfo
    
    End Function
    Se te ajudou marca como resposta e se possível vota como útil


    • Marcado como Resposta Rafael L. Furlan terça-feira, 22 de setembro de 2015 18:05
    • Editado Carlos_rodrigues terça-feira, 22 de setembro de 2015 18:09 correção
    terça-feira, 22 de setembro de 2015 18:02