我有一個PowerShell script將Get-ACL訪問控制項與使用訪問掩碼的標準Windows權限相匹配。奇怪的是,像「ReadAndExecute,Synchronize」這樣的ACE似乎產生了「FullControl」的許可。這裏是腳本:Odd PowerShell Get-ACL權限轉換
#Match current ACE permissions to regular permissions via access mask comparison (binary and/-band)
$acl = Get-Acl "C:\Program Files (x86)"
$accesses = $acl.Access
#Enumerate current directory's access rights
foreach ($access in $accesses) {
$Enumeration = $access.FileSystemRights
$keys = @()
[System.Enum]::GetValues($Enumeration.GetType()) | Where-Object { $Enumeration -band $_; write-host ($Enumeration -band $_) -ForegroundColor Red} | % {write-host -ForegroundColor Green $_;} | Select-Object -Unique | ForEach-Object { write-host -ForegroundColor Cyan $_; $keys += $_ }
$keys
}
也許我不完全理解如何適當地轉換這些訪問控制條目。對我來說,「修改,同步」會以某種方式最終在「FullControl」的權限設置中看起來很奇怪。另外,如果這個腳本在你自己的系統上運行,你會注意到它目前描述的相當混亂的調試格式。 「0」只是二進制「和」的非匹配結果。綠色值是由具有指定Windows權限的匹配訪問掩碼的ACE所產生的Windows權限(據推測)。
我希望我不會重複這個問題;我已經挖掘出並沒有找到答案,以我當前的理解水平向我解釋這一點。
'$ Enumeration -band $ _;' - >'($ Enumeration -band $ _)-eq $ _;' – PetSerAl
@PetSerAl謝謝!我對這個還很新,通過比較二進制的結果和傳入的原始類型集,我能獲得什麼?欣賞幫助 – Shrout1
@PetSerAl好吧,我明白了:)我在傳入的掩碼和正在評估的掩碼之間發生了一些奇怪的衝突。二進制和完全控制和讀取和執行恰好等於讀取和執行。奇怪的巧合碰撞。 – Shrout1