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.
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.
Respostas:
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.txt
arquivo 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.bin
para o seu novo nome de arquivo file2.bin
e 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
File.GetAccessControl()
eFile.SetAccessControl()
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.bat
arquivo , 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.
A maneira mais fácil, de longe, é usar o PowerShell e executar:
Get-Acl .\file1 | Set-Acl .\file2