Я пытаюсь написать сценарий в 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.
Не проверено, но как насчет чего-то вроде этого:
$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] ;
}