Предоставление разрешения пользователю домена не работает - PullRequest
0 голосов
/ 01 июня 2019

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

В этой части,

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

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

:: Grant Modify + Удалить дочерний элемент для подпапок и файлов только 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)

:: если есть какие-либо ранее существовавшие подпапки Grant admins Полный контроль icacls" C: \ demo \ example "/ grant:r администраторы: (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

ОБНОВЛЕНИЕ:

С здесь , я нашел около

Только подпапки и файлы (OI) (CI)(NP) (IO)

, что совпадает с тем, что хочет сделать 2-я инструкция, поэтому я попытался ее использовать.Сначала он ничего не делает, но после нескольких, примерно 6 раз, компиляции с * 1039 и без него, учетная запись пользователя получает полное разрешение, даже если я не изменил разрешения для кода, все еще (M,DC).

В настоящее время моя структура папок выглядит следующим образом.

test_folder
|- test_test_file
|- test_test_folder
    |- test_test_test_folder
    |- test_test_test_file

Для папок test_folder администратор и пользователь оба имеют полное разрешение.В этой подпапке есть Администратор и Пользователь, но оба не имеют разрешения, проверенного в нем.

...