是否有解决方案可以用现有 SID 替换帐户未知 (S-1-5-21-*) SID

是否有解决方案可以用现有 SID 替换帐户未知 (S-1-5-21-*) SID

我在许多来自旧/其他 Windows 安装的文件上都遇到了典型的“帐户未知”问题,到处都有大量典型答案。
但是,我并不是在寻找典型的takeownsubinaclxcaclsGUI 解决方案。我想将这些未知的 SID 更改为已知的本地 SID,但保留权限类型和继承。

到目前为止,唯一接近我所寻找的是 PowerShell 脚本:http://poshcode.org/2081允许删除网络共享中的未知 SID。它包含查找未知 SID 的基本逻辑,但我尚未找到替换FileSystemAccessRule对象中的 SID 的方法,但我对 PowerShell 或 .NET 不太熟悉。
如果我没记错的话,本文MS TechNet 上建议构建FileSystemAccessRule并且可以完成。

有人知道是否有更好的解决方案吗? 也许有适合这项工作的应用程序、命令行工具或 cmdlet?

答案1

在 Powershell 中使用Get-AclSet-Acl您可以通过操作 SDDL 字符串来修改 ACL。

首先获取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

相关内容