【发布时间】:2017-12-06 12:37:53
【问题描述】:
我们正在尝试使用 SDDL 属性比较文件或文件夹的 NTFS 权限。我们唯一感兴趣的是 ACL 是否相等,通过使用 SDDL 而不是其他方法,如 AccessToString 或仅比较两个普通 ACL 对象。这是因为我们过去在执行此操作时遇到了问题。
因此,我们现在遇到一个问题,即在 Windows 中检查 Advanced Permissions 选项卡时,File1 和 File2 具有完全相同的权限。但是,SDDL 说它不相等,尽管我们从 SDDL 字符串中删除了 Owner O: 部分,如 here 所示,因为所有者对我们不感兴趣。
代码:
Function Test-ACLequal {
Param (
$Source,
$Target
)
$CompParams = @{
ReferenceObject = Get-Acl -LiteralPath $Source
PassThru = $True
}
$CompParams.DifferenceObject = Get-Acl -LiteralPath $Target
$AccessParams = @{
ReferenceObject = ($CompParams.ReferenceObject.sddl -split 'G:', 2 | Select -Last 1)
DifferenceObject = ($CompParams.DifferenceObject.sddl -split 'G:', 2 | Select -Last 1)
PassThru = $True
}
if (Compare-Object @AccessParams) {
Write-Verbose 'Test-ACLequalHC: Not equal'
$false
}
else {
Write-Verbose 'Test-ACLequalHC: Equal'
$True
}
}
Test-ACLequal -Source $File1-Target $File2
您可以清楚地看到两个文件之间存在差异:
$AccessParams.ReferenceObject
DUD:(A;ID;FA;;;BA)(A;ID;0x1200a9;;;S-1-5-21-1078081533-261478967-839522115-243052)(A;ID;0x1301ff;;;S-1
-5-21-1078081533-261478967-839522115-280880)(A;ID;0x1301ff;;;S-1-5-21-1078081533-261478967-839522115-6
96733)(A;ID;0x1301ff;;;S-1-5-21-1078081533-261478967-839522115-696745)
$AccessParams.DifferenceObject
DUD:AI(A;ID;FA;;;BA)(A;ID;0x1200a9;;;S-1-5-21-1078081533-261478967-839522115-243052)(A;ID;0x1301ff;;;S
-1-5-21-1078081533-261478967-839522115-280880)(A;ID;0x1301ff;;;S-1-5-21-1078081533-261478967-839522115
-696733)(A;ID;0x1301ff;;;S-1-5-21-1078081533-261478967-839522115-696745)
有没有办法使用 SDDL 比较文件而不会遇到这个问题?
【问题讨论】:
标签: powershell permissions file-permissions acl ntfs