Alterando recursivamente as permissões com o Powershell

3

Estou tentando escrever um script no Powershell, que encontrará pastas de forma recursiva e, com base no nome da pasta, substitua a ACL na pasta.

Já tenho pastas com as permissões corretas. Estes eu uso como pastas de modelos.

Folder1
Folder2
 - Subfolder1
 - Subfolder2 

Existem literalmente milhares de pastas, todas com os mesmos nomes, e gostaria de aplicar o mesmo conjunto de permissões a todas as pastas nomeadas semelhantes. Eu trabalhei em abordar isso de algumas maneiras diferentes, mas eu não encontrei uma boa maneira de lidar com as sub-pastas e recursão.

Aqui está uma amostra da primeira maneira que tentei lidar com isso.

$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
    }
}

Quanto mais eu me dou bem tentando escrever isso, mais percebo que vai ser cada vez mais difícil. Eu tenho centenas de pastas com nomes semelhantes ao Folder2 Folder3 ..... FolderN, todos com a mesma estrutura de pastas e nomes de pastas dentro. Eu só quero algo simples que corresponda a um nome de pasta e, com base no nome, atribua uma determinada ACL predefinida.

    
por user10711 02.07.2009 / 23:11

1 resposta

2

Não testado, mas que tal algo como isto:

$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] ;
    }
    
por 02.07.2009 / 23:59