我有一个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