0

我需要对本地磁盘上的所有文件夹、子文件夹和文件设置“读取”权限,但文件夹“$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
4

1 回答 1

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 不喜欢的内容,您可能会严重破坏系统。

于 2013-06-18T20:33:43.037 回答