在 Powershell 中设置 InheritanceFlags 与 PropagationFlags
Setting InheritanceFlags vs PropagationFlags in Powershell
我试图找到 InheritanceFlags 和 PropagationFlags 的正确组合,这样我的新文件夹就不会继承文件夹之前的权限,而是将权限传播到新文件夹中包含的 folders/files ...我尝试交换下面的两个,但这只给了新文件夹与上面的相同的权限,并没有应用我的新组...
如何正确设置标志以仅将权限应用于此文件夹下的所有 files/folders 而不是从父文件夹中提取?
我找到了 this table,但它似乎没有达到我想要的效果...
function New-Ace {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true, Position=0)]
[Security.Principal.NTAccount]$Account,
[Parameter(Mandatory=$false, Position=1)]
[Security.AccessControl.FileSystemRights]$Permissions = 'ReadAndExecute',
[Parameter(Mandatory=$false, Position=2)]
[Security.AccessControl.InheritanceFlags]$InheritanceFlags = 'ContainerInherit,ObjectInherit',
[Parameter(Mandatory=$false, Position=3)]
[Security.AccessControl.PropagationFlags]$PropagationFlags = 'None',
[Parameter(Mandatory=$false, Position=4)]
[Security.AccessControl.AccessControlType]$Type = 'Allow'
)
New-Object Security.AccessControl.FileSystemAccessRule(
$Account, $Permissions, $InheritanceFlags, $PropagationFlags, $Type
)
}
$domain = 'TestDomain'
$administrators = ([wmi]"Win32_Sid.Sid='S-1-5-32-544'").AccountName
$acl = Get-Acl $path
$administrators, "$domain\Domain Admins" | ForEach-Object {
$acl.AddAccessRule((New-Ace $_ 'FullControl'))
}
$acl.AddAccessRule((New-Ace $ADNameRW 'Modify'))
$acl.AddAccessRule((New-Ace $ADNameRO 'ReadAndExecute'))
Set-Acl $path $acl
调用 $acl.SetAccessRuleProtection($true, $false)
应该阻止该目录或文件从其父目录继承权限,第二个参数指定应删除以前继承的权限。启用保护 = 禁用继承。
在您的 New-Ace
函数中,InheritanceFlags
specifies to which type of child object (files, directories, or both) the permissions can apply, and PropagationFlags
控制权限是否仅适用于该对象 and/or 的直系子对象。这些属性都不影响此文件或目录从其父级继承的方式。
顺便说一下,PowerShell 是建立在 .NET 上的,因此您可以使用相同的 类、方法等,并且在某些情况下,这是完成某些内容的唯一方法cmdlet.
我试图找到 InheritanceFlags 和 PropagationFlags 的正确组合,这样我的新文件夹就不会继承文件夹之前的权限,而是将权限传播到新文件夹中包含的 folders/files ...我尝试交换下面的两个,但这只给了新文件夹与上面的相同的权限,并没有应用我的新组...
如何正确设置标志以仅将权限应用于此文件夹下的所有 files/folders 而不是从父文件夹中提取?
我找到了 this table,但它似乎没有达到我想要的效果...
function New-Ace {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true, Position=0)]
[Security.Principal.NTAccount]$Account,
[Parameter(Mandatory=$false, Position=1)]
[Security.AccessControl.FileSystemRights]$Permissions = 'ReadAndExecute',
[Parameter(Mandatory=$false, Position=2)]
[Security.AccessControl.InheritanceFlags]$InheritanceFlags = 'ContainerInherit,ObjectInherit',
[Parameter(Mandatory=$false, Position=3)]
[Security.AccessControl.PropagationFlags]$PropagationFlags = 'None',
[Parameter(Mandatory=$false, Position=4)]
[Security.AccessControl.AccessControlType]$Type = 'Allow'
)
New-Object Security.AccessControl.FileSystemAccessRule(
$Account, $Permissions, $InheritanceFlags, $PropagationFlags, $Type
)
}
$domain = 'TestDomain'
$administrators = ([wmi]"Win32_Sid.Sid='S-1-5-32-544'").AccountName
$acl = Get-Acl $path
$administrators, "$domain\Domain Admins" | ForEach-Object {
$acl.AddAccessRule((New-Ace $_ 'FullControl'))
}
$acl.AddAccessRule((New-Ace $ADNameRW 'Modify'))
$acl.AddAccessRule((New-Ace $ADNameRO 'ReadAndExecute'))
Set-Acl $path $acl
调用 $acl.SetAccessRuleProtection($true, $false)
应该阻止该目录或文件从其父目录继承权限,第二个参数指定应删除以前继承的权限。启用保护 = 禁用继承。
在您的 New-Ace
函数中,InheritanceFlags
specifies to which type of child object (files, directories, or both) the permissions can apply, and PropagationFlags
控制权限是否仅适用于该对象 and/or 的直系子对象。这些属性都不影响此文件或目录从其父级继承的方式。
顺便说一下,PowerShell 是建立在 .NET 上的,因此您可以使用相同的 类、方法等,并且在某些情况下,这是完成某些内容的唯一方法cmdlet.