Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
powershell ACL仅适用于此文件夹_Powershell_Acl - Fatal编程技术网

powershell ACL仅适用于此文件夹

powershell ACL仅适用于此文件夹,powershell,acl,Powershell,Acl,在设置安全描述符时,各种资源提供了PropagationFlags和InheritanceFlags的组合,以获得所需的应用程序。不幸的是,关于这些标志的文档很少,而且对这些标志的含义的解释更为清晰。然而,当我使用这些来源的组合时,我并没有得到期望的结果。具体地说,要实现Apply to=this folder only,两个标志都应该为None,但当我这样做时,结果是Apply to this folder、子文件夹和文件。但有效的组合是PropagationFlags=“Inheritati

在设置安全描述符时,各种资源提供了PropagationFlags和InheritanceFlags的组合,以获得所需的应用程序。不幸的是,关于这些标志的文档很少,而且对这些标志的含义的解释更为清晰。然而,当我使用这些来源的组合时,我并没有得到期望的结果。具体地说,要实现Apply to=this folder only,两个标志都应该为None,但当我这样做时,结果是Apply to this folder、子文件夹和文件。但有效的组合是PropagationFlags=“InheritationOnly”和InheritanceFlags=“None”。我正在使用powershell设置ACL。
有人能评论一下为什么每个人都声称他们都不应该得到这个文件夹,而它显然不起作用吗?

这些标志记录在MSDN:,以及它们的组合上。当有疑问时,我通常使用GUI手动创建访问规则,并使用
(Get ACL c:\path)查看它的外观

要创建“仅此文件夹”权限,您需要将继承和传播设置为“无”。例:


请注意,
AddAccessRule
将忽略更改,如果
BUILTIN\Users
已经有一个调整较少的规则。您需要使用类似于
$acl.ModifyAccessRule(“Set”,$rule,[ref]$null)
的东西来修改现有的一个。

不确定问题的原因,但您可以尝试根据需要手动设置权限,然后使用powershell获取acl进行调试。我不确定您是否阅读了文章,我明确表示,如果我将两者都设置为“无”,则它不起作用,唯一有效的组合是如上所述。我不确定您是否测试过我的脚本。我在一分钟前在一个新文件夹上执行了它,我只得到了
这个文件夹
。我不是说,它在您的环境中不工作,但在我的环境中不工作,可能还有其他问题,因为我从未发现类似的问题。如果我使用你的代码,我会像忽略标志一样应用于此文件夹、子文件夹和文件。哪个操作系统?如果您使用GUI创建规则,它会将值设置为什么?请参阅更新答案中的“ACL传播规则”链接。继承=None,传播=InheritOnly是无效的(忽略的)组合,因为未继承任何内容。“无”仅为该文件夹的
。在具有相同操作系统和不同版本的不同计算机上进行测试。特定的计算机上可能有一个bug,但这仍然不能说明我的答案是错误的。每个人都声称它应该是无的,因为这是正确的组合
$acl = Get-Acl .\test
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule "BUILTIN\Users","ReadAndExecute", "None", "None","Allow"
$acl.AddAccessRule($rule)
Set-Acl -Path .\test -AclObject $acl