Powershell: entrada de tubulação para Set-Acl

2

tem uma pasta desarrumada com ACLs inconsistentes que eu preciso uniformizar. Eu esperava conseguir isso com o powershell. Então, estou tentando procurar todos os arquivos que faltam ao grupo necessário e aplicando os direitos por meio do Set-Acl:

Get-Acl | where {$_.accesstostring -notlike "*domain\required_grp*"} | Set-Acl $dir $acl 

Diferentemente do icacls, o Set-Acl exige que você seja o proprietário do arquivo para poder modificar a ACL. Por isso:

$dir= Get-Acl .\reference_file
$acl= $ACL.SetOwner([System.Security.Principal.NTAccount]$my_account)

Bem, ao executar o comando, recebo o seguinte erro:

Set-Acl : The input object cannot be bound to any parameters for the command either because the command does not take pipeline input or the input and its properties do not match any of the parameters that take pipeline input. At line:1 char:95

Tenho certeza de que o problema está no formato da saída canalizada para o Set-Acl, mas não consigo descobrir o quê. Obrigado por qualquer entrada, muito apreciada.

Luka

    
por shkdd 28.03.2014 / 10:03

1 resposta

0

Acredito que você esteja confundindo o PowerShell, porque você envia uma matriz de ACLs pelo pipeline, mas não itera cada uma delas. Além disso, o CMDlet Set-ACL espera que um caminho seja enviado pelo pipeline, pensa.

$acl= Get-Acl .\reference_file
$acl= $ACL.SetOwner([System.Security.Principal.NTAccount]$my_account)
Get-ChildItem | ? { (Get-ACL $_).accesstostring -notlike "*domain\groupname*"} | % { Set-ACL $_.Fullname $acl }

Isso funciona para mim. Ele obtém todos os arquivos ou pastas, verifica se a ACL corresponde à sua expressão e define a ACL, se necessário.

    
por 01.04.2014 / 14:07