Usuário com melhor resposta
Como usar Icacls com VBS

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
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
-
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
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
-
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.
-
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