前言

最近因工作需要,需要对批量服务器某一目录下的文件进行统一授权,对于linux来说,授权很方便,对于window来说,要对目录下的文件进行批量授权还是很不方便的,windows平台授权自然想到用icacls或cacls工具来完成任务,且灵活。

需求

  • 用vbs脚本完成授权工作,以便远程调用批量执行
  • 能指定授权目录
  • 能指定授权方式,即只对目录授权还是对目录文件统一授权
  • 若对文件授权,需递归遍历指定目录,对子目录文件也授权
  • 指定授权用户
  • 指定授予用户权限(如:RX,W,F)

实现

基于以上需求,写了如下vbs脚本

If WScript.Arguments.Count = 0 then
WScript.Echo "Usage: do_auth.vbs [-d|-f] [FilePath] [AuthUser]"
WScript.Quit(1)
end if
Set WshShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
objAuthOption=WScript.Arguments(0)
objStartFolder = WScript.Arguments(1)
objAuthUser = WScript.Arguments(2)
Set objFolder = objFSO.GetFolder(objStartFolder) ShowSubfolders objFSO.GetFolder(objStartFolder) Sub ShowSubFolders(Folder) 'Wscript.Echo Subfolder.Path
If objAuthOption = "-f" Then
Set curFiles = objFSO.GetFolder(Folder.Path).Files
For Each curFile in curFiles
intRunError = WshShell.Run("icacls " & curFile.Path & " /grant " & chr("34") & objAuthUser & chr("34") & ":F ", 2, True) If intRunError <> 0 Then
Wscript.Echo "Error assigning permissions for user " & objAuthUser & " to file " & curFile.Name
Else
Wscript.Echo "Success: file " & curFile.Name & " assigned user " & objAuthUser
End If
Next
For Each Subfolder in Folder.SubFolders
Set objFolder = objFSO.GetFolder(Subfolder.Path)
Set colFiles = objFolder.Files
For Each objFile in colFiles
intRunError = WshShell.Run("icacls " & objFile.Path & " /grant " & chr("34") & objAuthUser & chr("34") & ":F ", 2, True) If intRunError <> 0 Then
Wscript.Echo "Error assigning permissions for user " & objAuthUser & " to file " & objFile.Name
Else
Wscript.Echo "Success: file " & objFile.Name & " assigned user " & objAuthUser
End If
Next
ShowSubFolders Subfolder
Next ElseIf objAuthOption = "-d" Then
For Each Subfolder in Folder.SubFolders
intRunError = WshShell.Run("icacls " & Subfolder.Path & " /grant " & chr("34") & objAuthUser & chr("34") & ":F ", 2, True) If intRunError <> 0 Then
Wscript.Echo "Error assigning permissions for user " & objAuthUser & " to folder " & Subfolder.Path
Else
Wscript.Echo "Success: folder " & Subfolder.Path & " assigned user " & objAuthUser
End If
ShowSubFolders Subfolder
Next
Else
WScript.Echo "Parameter error"
WScript.Quit(1)
End If
End Sub

总结

上述代码实现了文件中所列的需求,希望能帮助到大家

Icacls 在windows目录文件授权中的应用的更多相关文章

  1. Windows之文件夹中打开PowerShell

    Windows之文件夹中打开PowerShell 为了解决Windows中在某个路径下使用PowerShell,而不是使用传统的cd命令切换过去,具体做法如下: 方法一 打开文件夹 在文件夹的内容区按 ...

  2. [windows]窗口文件夹中使用常见任务

    文件夹中使用常见任务,如截图所示增加红色框部分. 设置步骤: 我的电脑--〉右键--〉属性--〉高级选项--〉性能设置--〉自定义:勾选在文件夹中使用常见任务.

  3. 修改windows user 文件夹中的用户名

    假设我们需要将帐户A改名为B.首先我们需要用另一个管理员帐户C登陆系统. 1.在控制面板-〉用户帐户中将帐户A改名为B. 2.打开C:/Users或"用户"文件夹,将文件夹A重命名 ...

  4. 怎样修复“Windows/System32/Config/System中文件丢失或损坏”故障

    怎样修复“Windows/System32/Config/System中文件丢失或损坏”故障 英文原文引自 http://xphelpandsupport.mvps.org/how_do_i_repa ...

  5. [R语言]读取文件夹下所有子文件夹中的excel文件,并根据分类合并。

    解决的问题:需要读取某个大文件夹下所有子文件夹中的excel文件,并汇总,汇总文件中需要包含的2部分的信息:1.该条数据来源于哪个子文件夹:2.该条数据来源于哪个excel文件.最终,按照子文件夹单独 ...

  6. DOS命令行(1)——Windows目录与文件应用操作

    cd 1.使用cd快速切换到指定盘符与目录中 命令格式1:cd [/d] [<盘符>][<路径>] 或 chdir [/d] [<盘符>][<路径>] ...

  7. 在文件夹中 的指定类型文件中 查找字符串(CodeBlocks+GCC编译,控制台程序,仅能在Windows上运行)

    说明: 程序使用 io.h 中的 _findfirst 和 _findnext 函数遍历文件夹,故而程序只能在 Windows 下使用. 程序遍历当前文件夹,对其中的文件夹执行递归遍历.同时检查遍历到 ...

  8. 文件的哈希值不在指定的目录文件中。此文件可能已损坏或被篡(Windows10 /Windows8.1)

    ------------------------------------------Windows10------------------------------------------------ ...

  9. net开发过程中Bin目录net开发过程中Bin目录下面几种文件

    .net开发过程中Bin目录下面几种文件格式的解释 在.NET开发中,我们经常会在bin目录下面看到这些类型的文件: .pdb..xsd..vshost.exe..exe..exe.config..v ...

随机推荐

  1. CSS3背景渐变属性 linear-gradient(线性渐变)和radial-gradient(径向渐变)

    CSS3 Gradient分为linear-gradient(线性渐变)和radial-gradient(径向渐变). 为了更好的应用CSS3 Gradient,我们需要先了解一下目前的几种现代浏览器 ...

  2. OAuth2.0 基础概述

    web:http://oauth.net/2/ rfc:http://tools.ietf.org/html/rfc6749 doc:http://oauth.net/documentation/ c ...

  3. Json Utils

    import java.util.List;import java.util.Map; import net.sf.json.JSONArray;import net.sf.json.JSONObje ...

  4. [python学习笔记]Day3

    函数 如: def is_leapyear(year): if (year%4 == 0 and year%100 != 0) or (year%400 == 0): return True else ...

  5. ANSI X9.19 MAC算法

    /// <summary> /// 获取MAC校验字节数据 /// </summary> /// <param name="bankData"> ...

  6. gulp入坑系列(3)——创建多个gulp.task

    继续gulp的爬坑路,在准备get更多gulp的具体操作之前,先来明确一下在gulp中创建和使用多个task任务的情况. gulp所要做的操作都写在gulp.task()中,系统有一个默认的defau ...

  7. WP修改ProgressBar的前景色

    重载默认主题中的值,修改ProgressBar的前景色 做一个小项目时,用到 ProgressBar添加一个加载效果,但是背景不是白色的,调试时发现自己选的主题色与背景色相近,特别不清晰,加载效果几乎 ...

  8. Atitit.木马病毒的免杀原理---sikuli 的使用

    Atitit.木马病毒的免杀原理---sikuli 的使用 1. 使用sikuli java api1 1.1. 3. Write code!1 2. 常用api2 2.1. wait 等待某个界面出 ...

  9. bootstrap 学习笔记

    bootstrap作为当下的流行框架不知道它怎么能行呢? 之前也看过好多bootstrap的网上教程,可是发现光看真的记不住,说起来也真是忧桑~重点还是要自己做才是真正的印象深刻.后来我发现解析模板是 ...

  10. Docker: 解决Centos 7中Permission Denied的问题

    当用docker -v挂载volume后,会出现Permission Denied的问题,这有时是因为SeLinux导致的.解决方法如下: chcon -Rt svirt_sandbox_file_t ...