1
,但文件SDDL並不相等我們嘗試使用SDDL
屬性比較文件或文件夾的NTFS權限。我們唯一感興趣的是ACL是否相等,通過使用SDDL而不是其他方法如AccessToString
或僅比較兩個純ACL對象。這是因爲我們過去使用標準方法來解決問題。儘管它應該是
因此,我們現在針對在檢查Windows中的Advanced Permissions
選項卡時File1
和File2
具有完全相同的權限的問題。但是,SDDL表示它不相同,儘管我們從012DL中刪除了SDDL字符串中的Owner O:
部分,因爲所有者不感興趣。
代碼:
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,而不會在這個比較文件問題?
我正在考慮使用這種'$ CompParams.ReferenceObject.sddl -split「\(」,2 |選擇-Last 1' – DarkLite1
實際使用的分裂是不正確的事我已經更新了答案 – arco444
在檢查sddl之前修改sddl看起來並不是一件明智的事情,它看起來並不像它意味着什麼我們可以用字符串處理來分析它,將對象保持原樣並與'.Equals()'方法比較會更安全 – arco444