Powershell:在FileSystemAccessRule中结合ContainerInherit和ObjectInherit?

Powershell:在FileSystemAccessRule中结合ContainerInherit和ObjectInherit?,powershell,enums,Powershell,Enums,我正在编写一个脚本,它应该为文件夹及其所有内容设置文件系统访问权限 要影响所有内容,包括子文件夹和文件,应根据.NET文档将ContainerInherit和ObjectInherit结合起来。但是我不能让它工作,我也不确定它的语法 示例代码: $ar = new-object System.Security.AccessControl.FileSystemAccessRule(New-Object System.Security.Principal.NTAccount($user),FullC

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

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

示例代码:

$ar = new-object System.Security.AccessControl.FileSystemAccessRule(New-Object System.Security.Principal.NTAccount($user),FullControl,ContainerInherit,InheritOnly,Allow)
这会起作用,而且只使用
ObjectInherit
也会起作用,但如何将它们结合起来呢?使用引号和逗号(如
“ContainerInherit,ObjectInherit”
将不起作用,因为它显然不允许混合使用字符串和非字符串参数

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


那么,有什么建议吗?

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


[System.Security.AccessControl.InheritanceFlags]“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")

谢谢,我想我已经试过只使用字符串了,但是我的代码似乎还有其他一些问题,这让我觉得字符串根本不起作用。