2010-12-16 3 views
7

私は現在Vista 32ビットを使用しています。 Windowsセキュリティグループ「Everyone」を追加して、ディレクトリとそのすべてのサブディレクトリとすべてのファイルを完全に制御する方法を教えてください。私が使用できるpowershellスクリプトはありますか?"Everyone"というグループをディレクトリに追加し、そのすべてのサブディレクトリ

ありがとうございます!

答えて

8

私はmartonaのスニペットを拡張し、すべてのフォルダとサブフォルダにアクセスできました。ここに私のコードです -

$FilesAndFolders = gci "c:\data" -recurse | % {$_.FullName} 
foreach($FileAndFolder in $FilesAndFolders) 
{ 
    #using get-item instead because some of the folders have '[' or ']' character and Powershell throws exception trying to do a get-acl or set-acl on them. 
    $item = gi -literalpath $FileAndFolder 
    $acl = $item.GetAccessControl() 
    $permission = "Everyone","FullControl","Allow" 
    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission 
    $acl.SetAccessRule($rule) 
    $item.SetAccessControl($acl) 
} 
+0

ありがとうございます。うまく動作し、誰かが "Get-Item -LiteralPath"がUNCパスで動作することを不思議に思うなら、リモートマシンに権限を適用することができます。 – Patrick

4
$acl = Get-Acl c:\mydir 
$permission = "Everyone","FullControl","Allow" 
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission 
$acl.SetAccessRule($rule) 
$acl | Set-Acl c:\mydir 
+0

ありがとうございますが、Everyoneグループがトップフォルダのみに追加され、FullControlチェックボックスもオフになっています。私は何が欠けていますか? – tempid

+0

これは質問に対する良い答えではなかったかもしれませんが、私はこの例が今日役に立つと分かりました。 – yzorg

3

"ネイティブ" PowerShellの方法は必ずしも最良の方法ではない場合があります。このようなものについては、私はまだicacls.exeを使用します。良いol 'exesはPowerShellでうまくいくことを忘れないでください。あなたが設定し、実行したいディレクトリにジャストのCD:

icacls $pwd /grant "Everyone":(OI)(CI)F 

これは、誰もが(権限の継承を経由して)下向きにカレントディレクトリへのフルアクセスを提供します。これは、dir構造のEveryoneに対して明示的な拒否がない限り有効です。

+0

以下のスクリプトを使用すると、everyoneアカウントが追加されましたが、権限が与えられませんでした。このアプローチは私のために働いた... – BrianH

+0

私は魔法のコードが意味するものを知っているなら、これを使うだろう。 '(OI)(CF)'私はdevopを手助けしようとする開発者です。物事を自動化しようとする管理者ではないので、そのような魔法は以下の "Read"または "FullControl" powershellに比べて怖いです。 – yzorg

関連する問題