如何合并两个单独的 powershell 命令

如何合并两个单独的 powershell 命令

我有几百个文件夹,其中都包含一个名为“投标文件”的子文件夹。

我需要更改这些“投标文件”文件夹的每个实例的 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。

相关内容