Как скопировать разрешение из одной папки в другую с другим содержимым

Как скопировать разрешение из одной папки в другую с другим содержимым

благодаря ответам, доступным здесь – я знаю, как реплицировать разрешение идентичной папки с помощью 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

Я запускаю его как администратор.

Надеюсь, это будет ценно для всех. Добрый день!

Связанный контент