2

У меня есть типичная "Учетная запись неизвестна" на многих файлах из старых / других установок Windows, и везде есть множество типичных ответов.
Тем не менее, я не ищу типичное решение для takeown , subinacl , xcacls или GUI. Я хотел бы изменить эти неизвестные идентификаторы безопасности на известные локальные идентификаторы безопасности, но сохранить типы разрешений и наследование.

Пока что единственное, что мне нужно, - это скрипт PowerShell: http://poshcode.org/2081, который позволяет удалять неизвестные идентификаторы безопасности в общих сетевых ресурсах. Он содержит базовую логику для поиска неизвестных идентификаторов безопасности, но мне еще предстоит найти способ заменить SID в объекте FileSystemAccessRule но я не очень хорошо разбираюсь в PowerShell или .NET.
Если я не ошибаюсь, эта статья на MS TechNet предлагает создание FileSystemAccessRule и это может быть достигнуто.

Кто-нибудь знает, есть ли лучшее решение для этого? Может быть, есть приложение, инструмент командной строки или командлет для этой работы?

1 ответ1

2

В 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .