这是一个简单的问题,但我在谷歌或这里还找不到答案:
通过使用 PowerShell 或 cmd(无第三方工具),如何以允许我区分“列出文件夹内容”和“ReadAndExecute”的方式检索文件夹权限?
现在,当我在文件夹上执行 Get-Acl 时,当组仅授予列表访问权限或读取和执行权限时,它会返回相同的权限级别。如果我右键单击并转到“安全”选项卡,一组会选中“列出文件夹内容”,另一组会选中“读取和执行”,但两者都会使用 Get-Acl 返回“ReadAndExecute”。
图片如下:
Powershell 只返回“ReadAndExecute”:
文件系统权限:读取并执行、同步
访问控制类型:允许
身份参考:group1
是否继承:False
继承标志:ContainerInherit、ObjectInherit
传播标志:无
文件系统权限:读取并执行、同步
访问控制类型:允许
身份参考:group2
是否继承:False
继承标志:ContainerInherit
传播标志:无
一段时间后,我自己找到了一个可行的解决方案。
尽管 PowerShell(或 CMD 或 C#)始终为 ListDirectory 或实际 ReadAndExecute 权限返回“ReadAndExecute”,但仅当权限为“ListDirectory”时,“InheritanceFlag”将始终为“ContainerInherit”。因此,检查此标志,您可能会发现哪个组仅授予列表权限而不是读取和执行权限。
我已经在 PowerShell 中实现了此检查,到目前为止,它适用于所有测试用例:
foreach($access in (Get-Acl 'C:\test').Access) {
$filerights = $access.FileSystemRights.ToString();
$inheritanceFlg = $access.InheritanceFlags.ToString();
if($inheritanceFlg -eq 'ContainerInherit') {
$filerights = $filerights.replace('ReadAndExecute','ListDirectory');
}
$output = $access.IdentityReference.ToString() + ';' + $filerights;
$output
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)