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

要影响所有内容,包括子文件夹和文件,都应根据.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)也不起作用。

那么,有关如何执行此操作的任何提示?

最佳答案

您可以使用-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")

07-26 05:39