благодаря ответам, доступным здесь – я знаю, как реплицировать разрешение идентичной папки с помощью icacls /save & /restore
или robocopy /MIR
. Но я не могу заставить их переносить то же самое разрешение пользователя из папки в целевую папку с другим содержимым. С помощью ìcacls /restore
целевая папка все равно получает разрешение пользователя, унаследованное от ее родителя (хотя я уже явно отключил наследование).
Мой вариант использования: у меня есть папка портативного приложения, и она будет работать со сбоями, когда я помещу ее в эту проблемную подпапку, но полностью работать, когда я помещу ее в корень того же диска D:\. В моем пути к папке нет никаких "запрещенных" символов, таких как % ^ etc.
, только буквы, и также путь не очень длинный.
Есть ли способ быстро реплицировать разрешение из известного хорошего расположения в целевую папку? Пожалуйста, помогите.
Большое спасибо.
решение1
РЕДАКТИРОВАТЬ:
Извините за спешку.
После повторной проверки вот все, что я нашел:
- команда
robocopy
не назначает разрешение на файл(ы) или подпапку(и) внутри. Поэтому необходим этот дополнительный шаг (в Windows 10):Folder properties > Security tab > Advanced > Permission = Check the box at "Replace all child object permission entries with inheritable permission entries from this object"
Icacls /save
тоIcacls /restore
на самом деле тоже работает. Но он применяет состояние наследования папок. Если у "источника" включено наследование, то целевая папка также получает включенное наследование (от своего родителя, а не от родителя источника). Поэтому "источнику" нужно временно отключить наследование папок.
*)Я думаю, что лучше этого не делать, чтобы не повредить исходный код, если что-то пойдет не так или вы забудете отменить все изменения в «исходном коде».
- Я не буду больше тестировать PowerShell
get-acl -path | set-acl -path
, но ранее я обнаружил, что это работает так:icacls /restore
Для моего варианта использования я выбираю команду robocopy. Особенно после того, как нашел этоhttps://serverfault.com/questions/475612/replace-permission-entries-on-all-child-objects-using-icacls. Я не тестировал это, а только предположил, что это можно объединить в однострочную команду cmd, например:
robocopy d:\source_folder_permission destination_folder_permission /e /sec /secfix /xc /xn /xo /xx /xl & icacls "destination_folder_permission\*" /q /c /t /reset
Вот и все. Ура :)
Наконец-то! Я нашел ответ на мечту. Спасибо этому парнюРазрешения на копирование только с помощью Robocopy
Вот пример robocopy
команды:
robocopy d:\source_folder_permission destination_folder_permission /e /sec /secfix /xc /xn /xo /xx /xl
Я запускаю его как администратор.
Надеюсь, это будет ценно для всех. Добрый день!