Есть ли решение заменить идентификаторы SID Account Unknown (S-1-5-21-*) на существующие идентификаторы SID?

Есть ли решение заменить идентификаторы SID Account Unknown (S-1-5-21-*) на существующие идентификаторы SID?

У меня есть типичный "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

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