使用 Powershell 递归更改权限

使用 Powershell 递归更改权限

我正在尝试在 Powershell 中编写一个脚本,它将递归地查找文件夹并根据文件夹名称替换文件夹上的 ACL。

我已经拥有具有正确权限的文件夹。我将它们用作模板文件夹。

Folder1
Folder2
 - Subfolder1
 - Subfolder2 

实际上有数千个文件夹,所有文件夹都具有相同的名称,我想对所有同名文件夹应用同一组权限。我尝试过几种不同的方法来解决这个问题,但我还没有找到处理子文件夹和递归的好方法。

这是我尝试解决这个问题的第一种方法的示例。

$Prop = Get-Acl "Template\Subfolder1"
$Engd = Get-Acl "Template\Subfolder2"

foreach ($file in $(Get-ChildItem Folder2 -recurse)) {
  If ($_ = "Subfolder1") {
    set-acl $_ $Prop
    }
  If ($_ = "Subfolder2") {
    set-acl $_ $Engd
    }
}

我越是努力写这篇文章,就越是意识到它会变得越来越难。我有数百个文件夹,名称类似于 Folder2 Folder3.....FolderN,所有文件夹都具有相同的文件夹结构和文件夹名称。我只想要一些简单的内容,可以匹配文件夹名称并根据名称分配某个预定义的 ACL。

答案1

未经测试,但是类似这样的事情怎么样:

$acls = @{};
Get-ChildItem Template |
    Where-Object { $_.PSIsContainer } |
    ForEach-Object {
        $acls[$_.Name] = Get-Acl $_.FullName ;
    }

Get-ChildItem Folder2 -Recurse |
    Where-Object { $_.PSIsContainer -and $acls.ContainsKey($_.Name) } |
    ForEach-Object {
        Set-Acl $_.FullName $acls[$_.Name] ;
    }

相关内容