Я пишу скрипт, который удалит определенного пользователя, если учетная запись старше 7 дней.
Но когда пользователь удален, разрешения NTFS на моем файловом сервере остаются.
Как я могу удалить все разрешения для определенного пользователя с помощью PowerShell?Удалите разрешения NTFS для пользователя во всех подкаталогах
ответ
Вы должны никогда не предоставлять разрешения отдельным пользователям (за исключением домашних каталогов и профилей пользователей). Как вы сами видите, это беспорядок для очистки. Всегда создавать группы, представляющие конкретные функции/роли, которым требуется доступ, и предоставлять разрешения для этих групп.
Вы можете очистить разрешения с помощью icacls
:
icacls C:\root\folder /remove DOMAIN\user /t /c
Заметим, однако, что вы должны сделать это до того удаления учетной записи, потому что по какой-то причине icacls
не может очистить SIDs удаленных учетных записей ,
Если вы уже удалили учетную запись, вы можете попробовать исправить разрешения с Get-Acl
и Set-Acl
:
Get-ChildItem C:\root\folder -Recurse -Force | ForEach-Object {
$acl = Get-Acl -LiteralPath $_.FullName
$ace = $acl.Access | Where-Object { $_.IdentityReference -like 'S-1-5-*' }
$acl.RemoveAccessRule($ace) | Out-Null
Set-Acl -LiteralPath $_.FullName -AclObject $acl
}
Следует отметить, что вам может понадобиться отрегулировать условия для выбора ACE, чтобы удалить из файла или ACL папки ,
Обратите внимание, что приведенное выше не будет выполнено для файлов/папок, где владелец не является пользователем, выполняющим код или одну из его групп. В такой ситуации вы можете использовать такие инструменты, как subinacl
или SetACL
, в крайнем случае, как описано в ответах на this question на ServerFault.
Упоминайте, почему вы меняете мой вопрос? –
Я бы заподозрил, что тот, кто поставил ваш вопрос, сделал это, потому что он не прилагает никаких усилий для решения проблемы самостоятельно. –
Привет, в вашем вопросе нет кода, что вы пробовали? – sodawillow