我有几百个文件夹,其中都包含一个名为“投标文件”的子文件夹。
我需要更改这些“投标文件”文件夹的每个实例的 ACL 权限。
有没有办法自动化这个过程?有人告诉我,vbscript 不是处理 ACL 权限的好选择。我设想一个 powershell 脚本或类似的东西,它将自动搜索整个文件夹层次结构并将指定的 ACL 权限添加到每个名为“proposal”的文件夹,但我不知道这是否真的可行,或者是否有其他方法可以完成此任务。
有人有想法吗?
编辑:注释框总是弄乱我的实际 powershell 命令,其命令应如下所示:
Get-ChildItem "e:\datastore\marcstone bids\*\*\*\Bid Documents" | where {$_.Attributes -eq 'Directory'}
问题是,有时 Marcstone 投标下的 Proposals 文件夹并不总是三层,有时只有两层,因此当我尝试以下操作时:
Get-ChildItem "e:\datastore\marcstone bids\*\*\Bid Documents" | where {$_.Attributes -eq 'Directory'}
注意第二个版本只有两个 * 虽然有很多文件夹,但这个版本却找不到任何文件夹。为什么?
再次编辑:这越来越有趣了。检查成功命令返回的结果后,我发现它只返回空的“投标文件”文件夹。任何包含任何文件的“投标文件”文件夹都不会返回。为什么?
再次编辑:我将命令更改为以下内容,它返回所有“投标文件”文件夹。
Get-ChildItem "e:\datastore\marcstone bids\*\*\*\Bid Documents" | where {$_.Attributes -match 'Directory'}
现在学习如何使用 icacls 来更改权限。
再次编辑:好的,我认为我对 icacls 的语法是正确的:
icacls *filename* /deny special-restrict1:(f)
所以,请有人帮我将这两个命令连接在一起。
尝试这样的变量:
$var = Get-ChildItem "e:\datastore\marcstone bids\1001-3500\1701-1750\1702 Morrow M
emorial Home - Sparta WI\Bid Documents" | where {$_.Attributes -match 'Directory'} | icacls $var /deny special-restrict1
:/F
我选择了一个特定文件夹用于实验目的。该命令返回以下错误:
First parameter must be a file name pattern or "/?"
有人有想法吗?
答案1
icacls 是这里的答案: https://technet.microsoft.com/en-us/library/cc753525.aspx
它将允许你更改多个文件夹的 acl
答案2
不确定这是否有帮助,但情况如下:
您是否尝试过将所需文件夹的路径存储到变量中($path E:\datastore\marcstone bids***\Bid Documents)
我没有设置正确的环境,但只是一个想法
答案3
尝试以下方法:
Get-ChildItem "e:\datastore\marcstone bids\*" -include "Bid Documents" -directory -recurse
-recurse 参数应该可以找到所有子目录,无论它们嵌套多深。-directory 参数应该将搜索限制在文件夹(目录)内。我的语法可能有点错误,但它应该可以为你指明正确的方向。
从那里,您应该能够将结果传送到一个命令,该命令将为找到的每个文件夹设置 acl。