0

我正在将我的代码转换为使用icacls,目前正在遵循本教程:https ://ss64.com/nt/icacls.html 。

在这部分,

授予用户 jdoe 权限以创建、编辑和删除文件夹 C:\demo\example\ 中的文件,但防止删除文件夹本身:

:: 首先删除继承并授予管理员对顶层文件夹的完全控制权 icacls "C:\demo\example" /inheritance:r /grant:r administrators:(OI)(CI)(F)

:: 仅将修改 + 删除子项授予子文件夹和文件 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 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 PC 上运行它。

更新:

这里,我发现了

仅子文件夹和文件 (OI)(CI)(NP)(IO)

这与第二条指令想要做的一样,所以我尝试使用它。一开始它没有做任何事情,但是经过几次,大约 6 次,编译和不编译后,(NP)即使我没有更改代码的权限,用户帐户仍然获得了完全权限(M,DC)

目前,我的文件夹结构是这样的。

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

在 test_folder 上,Administrator 和 User 都拥有完全权限。它的子文件夹有管理员和用户,但两者都没有检查任何权限。

4

0 回答 0