2012-05-03 1 views
3

私は、フォルダとそのすべての内容のファイルシステムアクセス権を設定するスクリプトを書いています。Powershell:FileSystemAccessRuleでContainerInheritとObjectInheritを結合しますか?

すべてのコンテンツ(サブフォルダとファイルの両方)に影響を与えるには、.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)も機能しません。

だから、どのようにこれを行うためのヒント? |

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

答えて

7

あなたは(-bor使用してそれらをマージすることができますに似:

+0

ありがとう、私はすでに文字列のみを使用しようとしたと思ったが、明らかに私のコードには他にもいくつかの問題があった。 –

2

は私がコンピュータの前にいないんだが、これを試してみてください他の言語で)。他の答えに示されているようにカンマを使って文字列から解析することもできます。

サンプルシンタックスも修正されていますが、このサンプルは機能するはずです。

$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") 
+0

+検証しました。 Powershellが文字列をキャストすることができます非常に涼しい! –

関連する問題