Alterando permissões de pasta no vbscript

0

Eu tenho um vbscript que irá criar uma pasta, mas eu preciso que o usuário tenha permissões completas. Eu coloquei meu código abaixo. (Sistema Windows 8)

FSO.CreateFolder(lclFolder)
oWS.exec "icacls " & lclFolder & " /reset /inheritance:r /grant:r Users:(OI)(CI)F /T"

Eu tenho o script em execução como administrador usando:

If Not WScript.Arguments.Named.Exists("elevate") Then
  CreateObject("Shell.Application").ShellExecute WScript.FullName _
    , WScript.ScriptFullName & " /elevate", "", "runas", 1
  WScript.Quit
End If

A pasta é criada, mas as permissões do usuário são: ler & executar, Listar pastas conteúdo & Ler. Depois que a linha icacls foi inserida, isso não mudou. Alguém pode aconselhar onde eu errei?

    
por Glib Gibon 27.05.2015 / 13:39

2 respostas

0

De acordo com o Método Exec (Windows Script Host) :

The command line should appear exactly as it would if you typed it at the command prompt.

Portanto, force a incorporação do nome da pasta em um par de " aspas duplas da seguinte forma:

oWS.exec "icacls """ & lclFolder & """ /reset /inheritance:r /grant:r Users:(OI)(CI)F /T"

ou da seguinte forma:

oWS.exec "icacls " & CHR(34) & lclFolder & CHR(34) & " /reset /inheritance:r /grant:r Users:(OI)(CI)F /T"
    
por 27.05.2015 / 15:42
0

Você pode adicionar um comando TAKEOWN .

Tente usar o exemplo visto aqui . Talvez seja eu, mas o código de exemplo faz mais sentido do que o .vbs que você forneceu.

Set WshShell = CreateObject("WScript.Shell")
strFile = "c:\test_folder\test_file.txt"
setPerms = "%COMSPEC% /c echo Y| C:\windows\system32\cacls.exe " & Chr(34) & strFile & Chr(34) & " /G domain\everyone:F"
wscript.echo setPerms
WshShell.run setPerms

Altere o diretório strFile e domain\everyone de acordo com sua preferência.

Além disso, estou inclinado a pensar que o comando Cacls não está sendo executado com privilégios de administrador. Este é o script .VBS que eu uso para elevar comandos, arquivos, scripts, etc ... e envolve encapsar o comando que você quer que seja executado como Admin. Lembre-se também executa silenciosamente, mas você pode tirar essa opção.

bElevate = False
if WScript.Arguments.Count > 0 Then If WScript.Arguments(WScript.Arguments.Count-1) <> "|" then bElevate = True
if bElevate Or WScript.Arguments.Count = 0 Then ElevateUAC
REM run the following script with admin privilages. start point.

EXECUTE ESTE COMANDO COMO ADMINISTRADOR

REM the above script will be run with admin privilages. end point.
Sub ElevateUAC
    sParms = " |"
    If WScript.Arguments.Count > 0 Then
            For i = WScript.Arguments.Count-1 To 0 Step -1
            sParms = " " & WScript.Arguments(i) & sParms
        Next
    End If
    Set oShell = CreateObject("Shell.Application")
    oShell.ShellExecute "wscript.exe", WScript.ScriptFullName & sParms, , "runas", 1
    WScript.Quit
End Sub
    
por 27.05.2015 / 15:27