У меня есть типичный "Account Unknown" во многих файлах из старых/других установок Windows, и есть тонна типичных ответов везде.
Однако я не ищу типичное takeown
, subinacl
, xcacls
или решение GUI. Я хотел бы изменить эти неизвестные SID на известные локальные SID, но сохранить типы разрешений и наследование.
Пока единственное, что близко к тому, что я ищу, — это скрипт PowerShell:http://poshcode.org/2081который позволяет удалять неизвестные SID в сетевых ресурсах. Он содержит базовую логику для поиска неизвестных SID, но мне еще предстоит найти способ заменить SID в FileSystemAccessRule
объекте, но я не настолько хорошо владею PowerShell или .NET.
Если я не ошибаюсь,Эта статьяна сайте MS TechNet предлагается построить FileSystemAccessRule
и это может быть достигнуто.
Кто-нибудь знает, есть ли лучшее решение для этого? Может быть, есть приложение, инструмент командной строки или командлет для этой работы?
решение1
В Powershell с помощью Get-Acl
и Set-Acl
можно изменять ACL, манипулируя строкой SDDL.
Сначала получите объект ACL.
$acl = Get-Acl -Path C:\YourFile.txt
Теперь получим строку SDDL:
$sddl = $acl.sddl
Теперь вы можете заменить SID в строке на то, что вам нужно. Это использует регулярное выражение для обновления частичных совпадений.
$sddl2 = $sddl -replace "S-1-5-21-[0-9-]+", "ExistingSIDHere"
Затем обновите объект ACL:
$acl.SetSecurityDescriptorSddlForm($sddl2)
Затем установите ACL объекта:
Set-Acl -AclObject $acl -Path C:\YourFile.txt