Назад | Перейти на главную страницу

Предоставление разрешения пользователю домена для папки, которая не работает

Я конвертирую свой код для использования icacls и в настоящее время следую этому руководству: https://ss64.com/nt/icacls.html.

В этой части

Предоставьте пользователю jdoe права на создание, редактирование и удаление файлов в папке C: \ demo \ example \, но запретите удаление самой папки:

:: Сначала удалите наследование и предоставьте администраторам полный доступ к верхней папке icacls «C: \ demo \ example» / наследование: r / grant: r administrators: (OI) (CI) (F)

:: Grant Modify + Delete Child только для вложенных папок и файлов icacls "C: \ demo \ example" / grant: r ss64Dom \ jdoe: (OI) (CI) (IO) (M, DC) / T

:: Предоставить чтение / выполнение, запись и добавление в папку верхнего уровня icacls "C: \ demo \ example" / grant: r ss64Dom \ jdoe: (RX, WD, AD)

:: если есть какие-либо ранее существовавшие подпапки. Предоставить администраторам полный контроль над icacls "C: \ demo \ example" / grant: r administrators: (OI) (CI) (F) / T

, Я смог получить правильные результаты для первой инструкции, но вторая у меня не работает. Я пытался изменить M,DC расставаться с F но это тоже не работает.

Это мой код.

Option Explicit
On Error Resume Next
Dim objShell,objFSO, ProgramFiles, X, Y, intRunError, strFolders,strFiles, strNTGroup
Dim strFolder, strFile, strUserName, strEveryone, strDomain

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("Wscript.Shell")

strFolders = Array(_
"C:\Users\User\Documents\test_folder3",_
"C:\Users\User\Documents\test_folder2",_
"C:\Users\User\Documents\test_folder")

strFiles = Array(_
"C:\Users\User\Documents\test_file.txt",_
"C:\Users\User\Documents\test_file2.txt")

'User's User Name
strDomain = "Domain"
strUserName = strDomain & "\User"
strEveryone = "Everyone"

WScript.Echo "Set permissions for", strUserName, vbCRLF

'Assign User Permissions to Folders.
For X = 0 to Ubound(strFolders)
    strFolder = strFolders(X)
    If objFSO.FolderExists(strFolder) Then
        WScript.Echo "Folder: " & strFolder
        'intRunError = objShell.Run("%COMSPEC% /c Echo Y| cacls " & strFolder & " /E /C /G " & strUserName & ":F", 2, True)
        objShell.Run "icacls " & strFolder & " /inheritance:r /grant:r administrators:(OI)(CI)(F)", 2, True
        intRunError = objShell.Run("icacls " & strFolder & " /grant:r " & strUserName & ":(OI)(CI)(IO)(M,DC) /T", 2, True)

        If intRunError <> 0 Then
            Wscript.Echo "Folder ErrCode: " & intRunError
            Wscript.Echo "Error assigning permissions for user " _
            & strNTGroup & " to folder " & strFolder
        End If

    Else
        WScript.Echo "Folder " & strFolder & " not found"
    End If
Next

Кстати, я запускаю его на своем локальном ПК с Windows 7.

Так выглядит мой текущий код.

Option Explicit
On Error Resume Next
Dim objShell,objFSO, ProgramFiles, X, Y, intRunError, strFolders,strFiles, strNTGroup
Dim strFolder, strFile, strUserName, strUName, strEveryone, strDomain, intRunError2, intRunError3

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("Wscript.Shell")

strFolders = Array(_
"C:\Users\User\Documents\test_folder3",_
"C:\Users\User\Documents\test_folder2",_
"C:\Users\User\Documents\test_folder")

strFiles = Array(_
"C:\Users\User\Documents\test_file.txt",_
"C:\Users\User\Documents\test_file2.txt")

'User's User Name
strDomain = objShell.ExpandEnvironmentStrings( "%USERDOMAIN%" )
strUserName = objShell.ExpandEnvironmentStrings( "%USERNAME%" )
strUName = strDomain & "\User" 
strEveryone = "Everyone"

WScript.Echo "Set permissions for", strUName, vbCRLF

'Assign User Permissions to Folders.
For X = 0 to Ubound(strFolders)
    strFolder = strFolders(X)
    If objFSO.FolderExists(strFolder) Then
        WScript.Echo "Folder: " & strFolder
        intRunError = objShell.Run("icacls " & strFolder & " /inheritance:r /grant:r administrators:(OI)(CI)(F)", 2, True)

        If intRunError <> 0 Then 'If no error, proceed
            Wscript.Echo "Folder Error1: ", intRunError
            Wscript.Echo "Error assigning admin permissions for user " _
            & strUName & " to folder " & strFolder
        Else
            Set intRunError2 = objShell.Exec("icacls " & strFolder & " /grant:r " & strUName & ":(OI)(CI)(NP)(IO)(M,DC) /T", 2, True)

            Wscript.Echo "Exit code: " & intRunError2
            Wscript.Echo "ErrMsg: " & intRunError2.StdErr.ReadAll

            If intRunError3 <> 0 Then
            Wscript.Echo "Folder Error3: " & intRunError2
            Wscript.Echo "Error assigning permissions for user " _
            & strUName & " to folder " & strFolder

            Wscript.Echo "Exit code: " & intRunError2
            Wscript.Echo "ErrMsg: " & intRunError2.StdErr.ReadAll
            End If
        End If

    Else
        WScript.Echo "Folder " & strFolder & " not found"
    End If

    WScript.Echo "-------------------"
Next

Wscript.Echo "Done setting folder permissions", vbCRLF

Set objFSO = Nothing
Set objShell = Nothing

WScript.Quit

Первый objShell.Run работает. О следующих objShell.Exec, ошибок не появляется, но и ничего не происходит.