在 vbscript 中更改文件夹权限

在 vbscript 中更改文件夹权限

我有一个可以创建文件夹的 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 行后,情况没有改变。有人能告诉我哪里出错了吗?

答案1

按照Exec 方法(Windows 脚本宿主)

命令行的显示效果应与您在命令提示符下输入的效果完全一样。

因此,强制将文件夹名称嵌入一对"双引号中,如下所示:

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"

答案2

您可以添加夺回命令。

尝试使用看到的示例这里。也许是我的问题,但示例代码比.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

相关内容