Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.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正在尝试将组应用于仅适用于此文件夹的文件夹_Powershell - Fatal编程技术网

Powershell正在尝试将组应用于仅适用于此文件夹的文件夹

Powershell正在尝试将组应用于仅适用于此文件夹的文件夹,powershell,Powershell,我和“莱奥森科”有同样的问题。 我的剧本在下面 $groupperm = @( ('(RW)',$readwrite,$inheritanceFlag,$propagationFlag), ('(RO)',$readonly,$inheritanceFlag,$propagationFlag), ('(LF)',$Listfolder,'None','None')) foreach ($group in $groupperm){ $grouptxt = "FS1-$g

我和“莱奥森科”有同样的问题。 我的剧本在下面

$groupperm = @(
('(RW)',$readwrite,$inheritanceFlag,$propagationFlag),
('(RO)',$readonly,$inheritanceFlag,$propagationFlag),
('(LF)',$Listfolder,'None','None'))

foreach ($group in $groupperm){
        $grouptxt = "FS1-$groupname " + $group[0]
        $accessControlEntry = New-Object System.Security.AccessControl.FileSystemAccessRule @($grouptxt, $group[1], $group[2], $group[3], $type)
        $objACL.AddAccessRule($accessControlEntry)
        Set-ACL $folderpath $objACL
        $accessControlEntry
        }
这些组可以很好地应用于$folderpath,但最后一个组上的“应用于”而不是“仅此文件夹”与其他组一样是“此文件夹、子文件夹和文件”

如果我用
检查ACL(获取ACL$folderpath)。访问
我明白了

对于最后一个组,但是当我运行脚本(对于最后一个组)时,$accesscontrolentry的输出显示

谁能为我解释一下吗

提前感谢,

保罗

编辑好的,经过一些测试。。。如果我将权限设置为 我获得了所需的“仅此文件夹”权限集,但是如果我在脚本中包含该行并仅应用前两个权限,则同一行将权限设置为“此文件夹、子文件夹和文件” e、 g


有些东西坏了

尝试将InheritanceFlags设置为仅ObjectInherit

[更新]

我想我通过下面这些得到了你想要的

$ACL = Get-Acl "C:\test"

$Rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Users","FullControl","ObjectInherit,ContainerInherit","None","Allow")
$ACL.RemoveAccessRule($Rule)
Set-ACL $ACL.Path $ACL

$Rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Users","FullControl","None","None","Allow")
$ACL.AddAccessRule($Rule)
Set-ACL $ACL.Path $ACL
如您所见,我必须先删除现有规则,然后更改第二个规则中的InheritanceFlag,以更改“应用于”列中显示的内容

ObjectInherit,ContainerInherit=此文件夹、子文件夹和文件
ObjectInherit=此文件夹和文件
ContainerInherit=此文件夹和子文件夹
无=仅此文件夹


我只玩了一个快速的游戏,在Powershell或任何编程方面我都不是很好,所以我希望这能有所帮助。

是的,我尝试过修改(“(LF)”、$Listfolder、'ObjectInherit'、'None'),然后重新运行。。。变量输出显示FileSystemRights:Read,Synchronize AccessControlType:Allow IdentityReference:FS1测试(LF)为Inhered:False InheritanceFlags:ObjectInherit PropagationFlags:None但当我执行get acl时,它显示FileSystemRights:Read,Synchronize AccessControlType:Allow IdentityReference:MELTD\FS1测试(左)IsInherited:False InheritanceFlags:ContainerInherit,ObjectInherit PropagationFlags:None和Perm保留文件夹和子文件夹Yeah我认为你的理论是正确的,但是设置此文件夹、子文件夹和文件的其他两个权限似乎会将列表文件夹组权限更改为此文件夹、子文件夹和子文件夹不管我使用什么设置,它都是旧的和旧的文件。我认为单独使用icacls$folderpath/grant$grouptxt“:(R)”可以证明它工作得很好。只要我介绍其他两个(以及以任何顺序),它就会应用于更改。我不知道为什么,但感谢您的努力。
FileSystemRights  : Read, Synchronize
AccessControlType : Allow
IdentityReference : FS1-testing (LF)
IsInherited       : False
InheritanceFlags  : None
PropagationFlags  : None
icacls $folderpath /grant $grouptxt":(R)"
$groupperm = @(
        ('(RW)',$readwrite,$inheritanceFlag,$propagationFlag),
        ('(RO)',$readonly,$inheritanceFlag,$propagationFlag)        
        )
        $grouptxt = 'FS1-'+$groupname+' (LF)'
        icacls $folderpath /grant $grouptxt":(R)"
        
        foreach ($group in $groupperm){
            $grouptxt = "FS1-$groupname " + $group[0]
            $accessControlEntry = New-Object System.Security.AccessControl.FileSystemAccessRule @($grouptxt, $group[1], $group[2], $group[3], $type)
            $objACL.AddAccessRule($accessControlEntry)
            Set-ACL $folderpath $objACL
            $accessControlEntry
            }
$ACL = Get-Acl "C:\test"

$Rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Users","FullControl","ObjectInherit,ContainerInherit","None","Allow")
$ACL.RemoveAccessRule($Rule)
Set-ACL $ACL.Path $ACL

$Rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Users","FullControl","None","None","Allow")
$ACL.AddAccessRule($Rule)
Set-ACL $ACL.Path $ACL