我有一个 PowerShell 脚本来创建一个目录(如果它不存在),然后确保只有 SYSTEM 和本地管理员帐户才有访问权限:
#Create directory if it does not already exist
$path = "C:\MyDirectory"
[System.IO.Directory]::CreateDirectory($path)
$acl = Get-Acl $path
$acl.SetAccessRuleProtection($true,$false)
$System = New-Object System.Security.AccessControl.FileSystemAccessRule("SYSTEM","FullControl","Allow")
$acl.SetAccessRule($System)
$Admins = New-Object System.Security.AccessControl.FileSystemAccessRule("BUILTIN\Administrators","FullControl","Allow")
$acl.SetAccessRule($Admins)
$rules = $acl.access | Where-Object {
(-not $_.IsInherited) -and
$_.IdentityReference -like "AD\*"
}
ForEach($rule in $rules) {
$acl.RemoveAccessRule($rule) | Out-Null
}
$acl | Set-Acl $path
最后,我删除了授予任何可能之前被授予访问权限的域用户的权限。这对于父级来说很好,C:\MyDirectory
但所有子对象(子文件夹和文件)都不会获得任何权限:
我不想C:\MyDirectory
从 继承权限C:\
,但我希望C:\MyDirectory
从 继承子文件夹和子文件C:\MyDirectory
。
我该怎么做才能实现这个目标?
答案1
您需要在新规则上设置InheritanceFlags
和PropagationFlags
属性。默认情况下,它们不会被继承(None
)。
$System = [System.Security.AccessControl.FileSystemAccessRule]::new(
"SYSTEM",
"FullControl",
"ContainerInherit, ObjectInherit", # inheritanceFlags
"InheritOnly", # propagationFlags
"Allow"
)
根据您的目的,您可能还需要设置文件夹所有者。