У меня есть VBScript, который создаст папку, но мне нужно, чтобы пользователь имел полные разрешения. Я поставил свой код ниже. (Система Windows 8)

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

У меня есть скрипт, работающий от имени администратора, используя:

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

Папка создается, но пользовательские права: чтение и выполнение, просмотр содержимого папок и чтение. После вставки строки icacls это не изменилось. Может кто-нибудь посоветовать, где я ошибся?

2 ответа2

0

Вы можете добавить команду TAKEOWN .

Попробуйте использовать пример, показанный здесь. Может быть, это я, но пример кода имеет больше смысла, чем предоставленные вами .vbs .

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

Измените каталог strFile и domain\everyone по своему усмотрению .

Кроме того, я склонен думать, что команда Cacls не выполняется с правами администратора насквозь. .VBS который я использую для повышения команд, файлов, сценариев и т.д. И включает в себя инкапсуляцию команды, которую вы хотите выполнить от имени администратора. Не забывайте, что он также выполняется тихо, но вы можете отключить эту опцию.

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.

Запусти эту команду как админ

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
0

Согласно методу Exec (Windows Script Host):

Командная строка должна выглядеть точно так же, как если бы вы вводили ее в командной строке.

Поэтому принудительно вставьте имя папки в пару " двойных кавычек» следующим образом:

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

или следующим образом:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .