Что в Windows эквивалентно команде "chmod -R a-w" для рекурсивного удаления разрешений на запись для каталога? Сложная часть состоит в том, чтобы оставить остальные разрешения без изменений (например, если подпапка A доступна для чтения только groupA, НЕ открывайте разрешения папки для всех).
Я бы сказал, что нет "эквивалентного" способа, как дизайн контроль доступа в Windows сильно отличается от Linux.
В любом случае, вы можете добиться чего-то подобного с icacls команда, сценарий PowerShell, VBScript и т. д.
Для каждого файла могут быть правила предоставления и правила отказа, прикрепленные к пользователям или группам. И запрещающие правила отменяют правила предоставления. Таким образом, у вас могут быть разные способы в зависимости от существующих конфигураций ACL для файлов. Например.:
Вот пример для случая 1, чтобы добавить правило, которое запрещает множество разрешений на запись с использованием icacls
:
icacls C:\myFolder /deny UserOrGroup:(WD,AD,WDAC,WO,WEA,WA,DE,DC) /T
Чтобы добавить правила для нескольких пользователей / групп, вам нужно обернуть его циклом в пакетном скрипте.
Поскольку в своем вопросе вы отметили powershell, сценарий PowerShell, аналогичный приведенному выше icacls
пример:
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("UserOrGroup", "DeleteSubdirectoriesAndFiles, Write, Delete, ChangePermissions, TakeOwnership", "Deny")
Get-ChildItem 'C:\myFolder' -Recurse | ForEach-Object {
$acl = Get-Acl $_.FullName
$acl.AddAccessRule($rule)
Set-Acl $_.FullName $acl
}
PowerShell более сложен, но обеспечивает большую гибкость. Например. вы можете получить пользователя / группу из существующих правил в файле / папке и динамически добавить правило запрета.
Примечание. Возможно, вы найдете еще более актуальный вопрос и примеры в сервер, суперпользователь или переполнение стека с такими ключевыми словами, как "windows chmod", "powershell acl", "icacls" и т. д.