powershell - Powershell 尝试将组应用于仅适用于该文件夹的文件夹
问题描述
我和“leosenko”有同样的问题。我的脚本在下面;
$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,但是最后一个组上的“适用于”而不是“仅此文件夹”是“此文件夹、子文件夹和文件”,就像其他组一样。
(Get-ACL $folderpath).Access
如果我用我检查 ACL
FileSystemRights : Read, Synchronize
AccessControlType : Allow
IdentityReference : MELTD\FS1-testing (LF)
IsInherited : False
InheritanceFlags : ContainerInherit, ObjectInherit
PropagationFlags : None
对于最后一组,但是当我运行脚本(最后一组)时 $accesscontrolentry 的输出显示;
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
}
东西很破!
解决方案
尝试将 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 = 此文件夹和子文件夹
None = 仅此文件夹
我只是快速玩了一下,而且在 Powershell 或任何编程方面我都不是那么好,所以我希望这会有所帮助。
推荐阅读
- javascript - dc.js - 热图的矩形画笔?
- python - Python Pandas - 向每一行添加新的总和
- android - Libgdx 和 Google Play 计费
- css - 如何降低顶部菜单栏的高度
- java - Maven 程序集插件目标“jar-with-dependencies”不包含来自子 pom 的 jar 文件
- sqlite - 删除 SQLite 中的重复组
- javascript - 为远程文件(视频、照片等)创建 blob url 下载链接
- rust - 为什么“rev”在 Cargo 中不起作用?
- django - Django 如何仅将 example.com 重定向到 https 并将 *.example.com 重定向到 http?
- java - 使用同步或不低于为所有线程生成相同哈希码的代码。如何?