【发布时间】:2016-07-25 15:11:06
【问题描述】:
我有一个PowerShell script,它使用访问掩码将 Get-ACL 访问控制条目与标准 Windows 权限相匹配。奇怪的是,像“ReadAndExecute, Synchronize”这样的 ACE 似乎产生了“FullControl”的权限。这是脚本:
#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”只是二进制“and”的不匹配结果。绿色值是来自 ACE 的结果 Windows 权限,这些 ACE 具有与指定 Windows 权限匹配的访问掩码(假设)。
我希望我不会重复这个问题;我已经挖掘并没有找到以我目前的理解水平向我解释这一点的答案。
【问题讨论】:
-
$Enumeration -band $_;->($Enumeration -band $_) -eq $_; -
@PetSerAl 谢谢!我对此还是很陌生;通过比较二进制的结果和传入的原始类型集,我可以获得什么?感谢帮助
-
@PetSerAl 好的,我明白了 :) 我在传入的掩码和正在评估的掩码之间遇到了一些奇怪的碰撞。完全控制和读取和执行的二进制和恰好等于读取和执行。奇怪的巧合碰撞。
标签: powershell file-permissions acl