Permissions

使用 Powershell 遞歸更改權限

  • January 9, 2016

我正在嘗試在 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] ;
   }

引用自:https://serverfault.com/questions/35300