我在舊/其他 Windows 安裝的許多文件上都有一個典型的“帳戶未知”,並且到處都有大量典型的答案。
但是,我並不是在尋找典型的takeown
、subinacl
或xcacls
GUI 解決方案。我想將這些未知的 SID 變更為已知的本機 SID,但保留權限類型和繼承。
到目前為止,唯一接近我正在尋找的東西是 PowerShell 腳本:http://poshcode.org/2081允許刪除網路共用中未知的 SID。它包含查找未知 SID 的基本邏輯,但我尚未找到替換FileSystemAccessRule
物件中 SID 的方法,但我對 PowerShell 或 .NET 不太熟練。
如果我沒記錯的話本文MS TechNet 上建議建置FileSystemAccessRule
並且可以實現。
有沒有人知道是否有更好的解決方案?也許有適合這項工作的應用程式、命令列工具或 cmdlet?
答案1
在 Powershell 中Get-Acl
,Set-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