Copiar permissões de segurança de um arquivo para outro

19

Eu gostaria de replicar as permissões de um arquivo para outro. Não quero copiar os dados, apenas as permissões.

Por exemplo, criei um novo arquivo e quero que ele tenha as mesmas permissões que outro arquivo que já existia.

TaoTao
fonte
Mesmas permissões que outro arquivo, mas diferente do diretório em que estão?
PsychoData 13/09/13

Respostas:

28

Você pode fazer isso em algumas etapas com icacls e um editor de texto.

Primeiro você deve salvar as permissões do arquivo original

icacls C:\test\file1.bin /save perms.txt

você precisará editar o perms.txtarquivo que você acabou de criar em qualquer pasta na qual você executou icacls. O arquivo deve ser algo como isto:

file1.bin
D:AI(A;;0x1301bf;;;BU)(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;0x1200a9;;;BU)(A;ID;0x1301bf;;;AU)

Você pode ignorar todas as coisas na segunda linha, tudo o que importa é a primeira linha. Mude file1.binpara o seu novo nome de arquivo file2.bine salve o arquivo.

Agora você só precisa restaurar as permissões do arquivo no segundo arquivo. Observe que desta vez não incluímos o nome do arquivo. (Se você receber um erro que diz " Nem todos os privilégios ou grupos mencionados estão atribuídos ao chamador " . Execute o programa novamente em um prompt de comando elevado.)

icacls C:\test\ /restore perms.txt
Scott Chamberlain
fonte
talvez colocá-los em um script para automatizar um pouco a tarefa?
PsychoData 13/09
2
Isso poderia ser feito, mas não consigo pensar de fora como executar o passo 2 com facilidade. Enfim, se eu estava indo para escrevê-lo, gostaria apenas de fazer a coisa toda em PowerShell usando File.GetAccessControl()eFile.SetAccessControl()
Scott Chamberlain
4

Para compor um lote (copiar permissões de segurança de uma subpasta ou de todas as pastas de uma unidade para a mesma restrição de pasta / arquivo em outra unidade), crie um cpdacls.batarquivo , digamos, com este conteúdo:

@echo off
for /r %1 %%f in (.) do call :icacls_one %%f %2

goto :eof

:icacls_one

icacls %1\*.* /save %TEMP%\perms.txt
icacls %2.%~pnx1 /restore %TEMP%\perms.txt
del /q %TEMP%\perms.txt

E então execute como cpdacls.bat e:\ f:\.

Observe que a estrutura da pasta na pasta de destino deve ser a mesma da pasta de origem, tirada da raiz , não dependendo da subpasta que você especificou como pasta de origem.

Olexa
fonte
4

A maneira mais fácil, de longe, é usar o PowerShell e executar:

Get-Acl .\file1 | Set-Acl .\file2
Giovanni Bassi
fonte