4

我正在编写一个脚本,该脚本应该为文件夹及其所有内容设置文件系统访问权限。

要影响所有内容,包括子文件夹和文件,应根据 .NET 文档将 ContainerInherit 和 ObjectInherit 结合起来。但我无法让它工作,我不确定语法。

示例代码:

$ar = new-object System.Security.AccessControl.FileSystemAccessRule(New-Object System.Security.Principal.NTAccount($user),FullControl,ContainerInherit,InheritOnly,Allow)

那会起作用,所以只能使用ObjectInherit,但是我怎样才能将它们结合起来呢?像这样使用引号和逗号是"ContainerInherit,ObjectInherit"行不通的,因为它显然不允许混合字符串和非字符串参数。

我也尝试过使用-and运算符,但这只会给我一个错误。将枚举分配给变量 ( $inherit = ContainerInherit,ObjectInherit) 也不起作用。

那么,关于如何做到这一点的任何提示?

4

2 回答 2

9

您可以使用 -bor 合并它们(类似于其他语言中的 |)。如另一个答案所示,使用逗号从字符串中解析它也可以。

我还更正了您的示例语法,这个示例应该可以工作。

$if=[Security.AccessControl.InheritanceFlags]
$fsr=[Security.AccessControl.FileSystemRights]
$pf=[Security.AccessControl.PropagationFlags]
$flags = [Security.AccessControl.InheritanceFlags]($if::ContainerInherit -bor $if::ObjectInherit)

$ar = new-object Security.AccessControl.FileSystemAccessRule ((New-Object System.Security.Principal.NTAccount($user)),$fsr::FullControl, $flags, $pf::InheritOnly, "Allow")

但更简单的是只使用字符串:

new-object Security.AccessControl.FileSystemAccessRule ($user, "FullControl", "ContainerInherit,ObjectInherit", "InheritOnly", "Allow")
于 2012-05-03T09:22:01.497 回答
3

我不在电脑前,但试试这个:

[System.Security.AccessControl.InheritanceFlags]'ContainerInherit,ObjectInherit'

于 2012-05-03T09:09:36.283 回答