我需要为本地磁盘上的所有文件夹,子文件夹和文件设置“读取”权限,但文件夹“$ Recycle.Bin”除外 如何才能做到这一点?现在,除了如何消除其中一个文件夹之外,所有权限都会分发?
这就是我的尝试:
Function SetSystemDriveRightsVBS( strUPN, strRights )
On Error Resume Next
Set objEnvLocal = WshShell.Environment("Process")
Set FSLocal = CreateObject("Scripting.FileSystemObject")
systemRootFolder = objEnvLocal("SystemRoot")
systemDriveFolder = objEnvLocal("SystemDrive") & "\.."
Set rootFolder = FSLocal.GetFolder(systemRootFolder)
Call Information("Setting Rights on: " & systemDriveFolder, 0)
stdComspec = "cacls """ ' переменная env C:\Windows\System32\cmd.exe
stdRights = """ /T /E /C /G " & strUPN & ":" & strRights
' Setting Permissions on SystemDrive, SystemRoot, SystemRoot\system32 folders and there contents, if Administrator has a permission
Call RunEnc( stdComspec & systemDriveFolder & stdRights, consoleCharset)
Call RunEnc( stdComspec & systemRootFolder & stdRights, consoleCharset)
Call RunEnc( stdComspec & systemRootFolder &"\System32" & stdRights, consoleCharset)
Call RunEnc( stdComspec & systemRootFolder &"\SysWOW64" & stdRights, consoleCharset)
stdRights = """ /T /E /C /G " & strUPN & ":" & strRights
' A very very long recursive filesystem permission set
'Call SetRightsOnFolderContent(systemDriveFolder,stdComspec,stdRights)
' Обработка ошибок скрипта
If Err <> 0 Then
Call GlobalInformation("Error setting rights on DiskDrive:" & Err.Number & " -- " & Err.Description)
Err.Clear
End If
End Function
答案 0 :(得分:0)
使用icacls
。不要打扰cacls
(它不能正确处理继承)。我会使用一个批处理脚本,因为对于像这样的任务来说它比VBScript简单得多(甚至更多,因为你无论如何都要炮轰):
@echo off
for /d %%d in (C:\*) do (
icacls "%%~fd" /grant username:(OI)(CI)R /t
)
以上内容将授予C:\
所有未设置隐藏标志及其子文件夹的直接子文件夹的读取权限。这会自动排除$Recycle.bin
,但也会排除其他一些系统文件夹。如果您还要为这些文件夹授予读取权限,则必须使用以下内容:
@echo off
for /f "tokens=*" %%d in ('dir /a:d /b C:\') do (
if not "%%~nxd"=="$Recycle.bin" icacls "%%~fd" /grant username:(OI)(CI)R /t
)
然而,在实际搞乱系统文件夹的权限之前,您应该三思而后行。在某些系统文件夹中,即使管理员也没有访问权限,因此您必须拥有所有权,如果您更改了Windows不喜欢的内容或权限,您可以认真搞砸系统。