Я хотів би копіювати дозволи файлу на інший. Я не хочу копіювати дані, лише дозволи.
Наприклад, я створив новий файл і хочу, щоб він мав такі ж дозволи, як і інший файл, який вже існував.
Я хотів би копіювати дозволи файлу на інший. Я не хочу копіювати дані, лише дозволи.
Наприклад, я створив новий файл і хочу, щоб він мав такі ж дозволи, як і інший файл, який вже існував.
Відповіді:
Це можна зробити за кілька кроків за допомогою icacls та текстового редактора.
Спочатку потрібно зберегти дозволи початкового файлу
icacls C:\test\file1.bin /save perms.txt
вам потрібно буде відредагувати створений perms.txt
вами файл у папці, в якій ви працювали icacls
. Файл повинен виглядати приблизно так:
file1.bin
D:AI(A;;0x1301bf;;;BU)(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;0x1200a9;;;BU)(A;ID;0x1301bf;;;AU)
Ви можете проігнорувати всі речі на другому ряду, все, що нам цікаво, це перший ряд. Змініть на file1.bin
нове ім'я файлу file2.bin
та збережіть файл.
Тепер вам просто потрібно відновити права доступу до другого файлу, зауважте, що ми цього разу не включали ім'я файлу. (Якщо ви отримаєте помилку, яка говорить " Не всі привілеї або групи, на які посилаються, призначені абоненту. " Запустіть програму ще раз у підвищеному командному рядку.)
icacls C:\test\ /restore perms.txt
File.GetAccessControl()
іFile.SetAccessControl()
Щоб зробити це в пакеті (скопіюйте пемісії безпеки із підпапки або всіх папок одного диска в ту саму папку / стриктуру файлів на іншому диску), створіть, скажімо, cpdacls.bat
файл із цим вмістом:
@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
А потім запустити так cpdacls.bat e:\ f:\
.
Зауважте, що структура папки в цільовій папці повинна бути такою ж, як структура папки у вихідній папці, взята з її кореня , не залежно від того, яку підпапку ви вказали як вихідну папку.
Найпростіший спосіб на сьогодні - це використовувати PowerShell і запускати:
Get-Acl .\file1 | Set-Acl .\file2