Icacls 在windows目录文件授权中的应用

前言

最近因工作需要,需要对批量服务器某一目录下的文件进行统一授权,对于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

总结

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

时间: 2024-11-07 05:48:20

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

Windows之文件夹中打开PowerShell

Windows之文件夹中打开PowerShell 为了解决Windows中在某个路径下使用PowerShell,而不是使用传统的cd命令切换过去,具体做法如下: 打开文件夹 在文件夹的内容区按下Shift+右击 点击在此处打开PowerShell即可. 结果: 原文地址:https://www.cnblogs.com/ZN-225/p/10269504.html

Windows查找文件夹中文件包含字符串

findstr /R /N /s "search string" *

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

怎样修复“Windows/System32/Config/System中文件丢失或损坏”故障 英文原文引自 http://xphelpandsupport.mvps.org/how_do_i_repair_a_missing_or_cor1.htm 此类错误通常说明计算机由于注冊表的原因不能启动,下列操作应该可以修正以上错误.然而,须要特别注意的是,你须要将5个注冊表区域所有进行替换.仅仅简单的替换一个或者两个将会潜在的导致其它的错误 注意 假设你使用的是WindowsXP的OEM版本号,那么你

读取文件夹下所有子文件夹中的excel文件,并根据分类合并

解决的问题:需要读取某个大文件夹下所有子文件夹中的excel文件,并汇总,汇总文件中需要包含的2部分的信息:1.该条数据来源于哪个子文件夹:2.该条数据来源于哪个excel文件.最终,按照子文件夹单独保存汇总文件,或者只保存成一个汇总文件. 场景描述:抓取了各个APP的使用数据,分散地保存在各个文件夹中.文件格式如下: 第一级分类:文件夹名 第二级分类:文件夹下xlsx文件名 第三级分类:每个xlsx文件中每行(具体的每条数据),但其中并没有该APP属于的二级分类和一级分类,需要为每条数据添加二

Windows Phone获得IsolatedStorage中指定目录下的所有文件

在Windows Phone 中对隔离存储空间中的文件操作需要通过System.Io.IsolatedStorage下的类进行操作 获得指定文件夹下的所有文件: 参数:是指定文件夹的路径加上通配符,格式:\folder1\* List<string> GetFileNames(string _strFolder) { List<string> returnlst = new List<string>(); using (IsolatedStorageFile stora

用python脚本把windows的文件上传到linux中

import paramiko hostname = '192.168.1.1' #linux主机IP地址 port = 22 #端口 username = 'root' #用户名 password = '123qwe' #密码 t=paramiko.Transport((hostname,port)) t.connect(username=username,password=password) sftp = paramiko.SFTPClient.from_transport(t) sftp.

Shell脚本递归打印指定目录中所有目录文件

#!/bin/bash #递归打印当前目录下的所有目录文件. PRINTF() { ls $1 | while read line #一次读取每一行放到line变量中 do [ -d $1/$line ] && { DIR="$1/$line" echo $DIR } DIR1=`dirname $DIR` #求路径. A=`ls -F $DIR1 | grep / | grep "\<$line\>"` #判断line是不是一个目录.

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

.net开发过程中Bin目录下面几种文件格式的解释 在.NET开发中,我们经常会在bin目录下面看到这些类型的文件: .pdb..xsd..vshost.exe..exe..exe.config..vshost.exe.config 项目发布的时候,往往搞不清楚哪些是需要的,那些是不需要的.那么这些格式的文件到底是干什么用的呢? pdb .pdb文件,是VS生成的用于调试的符号文件(program database),保存着调试的信息.在VS的工程属性,C/C++,调试信息格式,设置/Zi,那么

windows映射到本地文件夹中,打开程序

windows映射到本地文件夹中,打开程序,是在调用本地程序执行,如果不能删除或修改,是本地程序占用,关闭本地程序即可 实例: 在ubuntu上映射出来的一个文件夹,直接双击了jar文件,实质是调用本地的Java(TM) Platform SE binary程序,找到本地进程javaw,结束掉即可,跟远程 程序 操作 进程无关