Vorrei replicare le autorizzazioni di un file su un altro. Non voglio copiare i dati, solo le autorizzazioni.
Ad esempio, ho creato un nuovo file e desidero che abbia le stesse autorizzazioni di un altro file già esistente.
Vorrei replicare le autorizzazioni di un file su un altro. Non voglio copiare i dati, solo le autorizzazioni.
Ad esempio, ho creato un nuovo file e desidero che abbia le stesse autorizzazioni di un altro file già esistente.
Risposte:
Puoi farlo in pochi passaggi con icacls e un editor di testo.
Innanzitutto è necessario salvare le autorizzazioni del file originale
icacls C:\test\file1.bin /save perms.txt
dovrai modificare il perms.txt
file che hai appena creato nella cartella in cui ti sei imbattuto icacls
. Il file dovrebbe essere simile al seguente:
file1.bin
D:AI(A;;0x1301bf;;;BU)(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;0x1200a9;;;BU)(A;ID;0x1301bf;;;AU)
Puoi ignorare tutte le cose sulla seconda fila, tutto ciò che ci interessa è la prima fila. Cambia il file1.bin
tuo nuovo nome file file2.bin
e salva il file.
Ora devi solo ripristinare i permessi del file sul secondo file, nota che questa volta non abbiamo incluso il nome del file. (Se viene visualizzato un errore che dice " Non tutti i privilegi o gruppi a cui viene fatto riferimento vengono assegnati al chiamante. " Eseguire nuovamente il programma in un prompt dei comandi con privilegi elevati.)
icacls C:\test\ /restore perms.txt
File.GetAccessControl()
eFile.SetAccessControl()
Per farlo in un batch (copia le pemission di sicurezza da una sottocartella o da tutte le cartelle di un'unità nella stessa cartella / file in un'altra unità), crea un cpdacls.bat
file , diciamo, con questo contenuto:
@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 poi eseguirlo come cpdacls.bat e:\ f:\
.
Si noti che la struttura delle cartelle nella cartella di destinazione deve essere uguale alla struttura delle cartelle nella cartella di origine, presa dalla sua radice , non dipende dalla sottocartella specificata come cartella di origine.
Il modo più semplice, di gran lunga, è usare PowerShell ed eseguire:
Get-Acl .\file1 | Set-Acl .\file2