我有一个可以创建文件夹的 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
命令行的显示效果应与您在命令提示符下输入的效果完全一样。
因此,强制将文件夹名称嵌入一对"
双引号中,如下所示:
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