我正在尝试在 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] ;
}