powershell - powershell定义权限应用于设置Acl的位置

  显示原文与译文双语对照的内容

我正在试图在可以用的Windows 文件夹属性窗口中进行模拟: 文件夹属性 → Secutity →高级→权限→更改权限。

在那个GUI里有个

  • 包含对象的这里父对象的可以继承权限
  • 使用这里对象的可以继承权限替换所有子对象权限- 我认为对应于 PropagationFlag = None

当你单击添加/编辑时。 按钮,你有下列选项的下拉列表,InheritanceFlags 与它的中的每个选项相对应? 我已经在实验中找到了我所发现

  • 这里文件夹- None
  • 这里文件夹子文件夹和文件
  • .对所有后续子文件夹应用权限
  • 该文件夹和文件
  • 子文件夹和文件- ContainerInherit, ObjectInherit
  • 仅子文件夹- ContainerInherit
  • 仅文件- ObjectInherit

check 对应的标志将这些权限应用于这里容器中的对象和/或者容器。?

我还确定了这些 PropagationsFlags的意思:

  • InheritOnly ( 仅当ACE被设置为继承时才传播到所有当前子对象)
  • NoPropagateInherit ( 该ACE不传播到任何当前子对象)
  • 无( 这里ACE传播到覆盖它们之前的所有子对象并打开它的继承)

find为已经存在权限或者用户配置文件中的符号链接文件夹添加额外权限,以便为现有用户/组添加额外权限,或者添加额外的用户/组,如符号链接文件夹。

我现在正在使用的代码如下。 最终我将在许多不同的文件夹中使用多个不同的文件夹,包括 c:users{username}的用户配置文件。


function check-permissions ( $folder ) {


 $GroupName ="Domain Admins"


 if ( -not (Test-Path -LiteralPath $folder) ) {


 Write-Output"Cannot find $folder"


 } else {


 ((get-acl -literalPath $folder).access).IdentityReference.Value |


 findstr/i ($env:USERDOMAIN +""+ $GroupName) |


 out-null


 $result = $?


 if ( -not $result ) {


 write-output ($folder +": adding permissions")


 #adding new permissions


 $colRights = [System.Security.AccessControl.FileSystemRights]"FullControl" 


 $InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit, [System.Security.AccessControl.InheritanceFlags]::ObjectInherit


 $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::InheritOnly


 $objType =[System.Security.AccessControl.AccessControlType]::Allow


 $objUser = New-Object System.Security.Principal.NTAccount($env:USERDOMAIN +"" + $GroupName)


 $objACE = New-Object System.Security.AccessControl.FileSystemAccessRule ($objUser, $colRights, $InheritanceFlag, $PropagationFlag, $objType)


 # output the ACE


 $objACE | format-list *


 #$objACL = Get-Acl -literalPath $folder # This gets the full security info but substitutes the different user as owner, which we don't want or it will overwrite the owner info with the wrong user when we use set-acl


 $objACL = (Get-Item -literalPath $folder).GetAccessControl('Access')


 if ( -not $? ) {


 Write-Output ("Failed to get permissions on:" + $folder)


 } else {


 $objACL.AddAccessRule($objACE)


 if ( $objACL ) { #objACL exists


 #Set-ACL -literalPath ($folder) -AclObj $objACL # This tries to set the owner too


 [System.IO.Directory]::SetAccessControl($folder,$objACL) # This seems to work


 } else { # $objACL is null


 write-output"Error developing new permissions object. Leaving folder permissions alone."


 }


 }


 } else {


 write-debug ($folder +": Permissions OK")


 }


 }


}



check-permissions"c:temptesta"



时间: 原作者:

"应用于"值是由 InheritanceFlagsPropagationFlags ( 它实际上定义了如何限制传播)的组合定义的。 下面概述了哪个值产生了"应用于":


Apply To Inheritance Propagation


-------- ----------- -----------


This folder only None any


This folder, subfolders and files CI, OI None or NoPropagateInherit


This folder and subfolders CI None or NoPropagateInherit


This folder and files OI None or NoPropagateInherit


Subfolders and files only CI, OI InheritOnly


Subfolders only CI InheritOnly


Files only OI InheritOnly



有关传播规则的更详细描述,请参见这里的,如所述。 在你的问题的注释中。

原作者:
...