Powershellでフォルダのアクセス権限を一括設定

by 山口 12. 1月 2010 18:19

久しぶりにネタを投下します。

マシンのセットアップ作業なんかをしていると、フォルダのアクセス権限を設定する作業なんてのがよくありますよね(実際今やってます)。

そんな時にスクリプトでパパッとやれたらなと思って、サクッと作ってみました。一括で設定するので、設定ファイルを読み込んでアクセス権限を設定する事にします。

まず、以下のようなXMLファイルを作ります。

Auth.xml
<?xml version="1.0" encoding="utf-8"?>
<AccessControls>
     <AccessControl>
         <Path>C:\Users\coma2n\Desktop\Hoge</Path>
         <Rules>
             <Rule>
                 <Identity>Everyone</Identity>
                 <Rights>ReadData</Rights>
                 <Type>Allow</Type>
             </Rule>
         </Rules>
     </AccessControl>
     <AccessControl>
         <Path>C:\Users\coma2n\Desktop\Fuga</Path>
         <Rules>
             <Rule>
                 <Identity>Everyone</Identity>
                 <Rights>ReadData</Rights>
                 <Type>Allow</Type>
             </Rule>
         </Rules>
     </AccessControl>
</AccessControls>

AccessControl要素(複数指定可)にはアクセス権限を設定するフォルダを指定します。 Rule要素(複数指定可)にはそのフォルダに設定する権限を指定します。

そして、以下のように「Set-Auth」スクリプト(後述)を呼び出します。

PS > Set-Auth.ps1 Auth.xml

これで複数のフォルダに一括でアクセス権限を設定できます。

「Set-Auth」スクリプトの中身は以下

Set-Auth.ps1

param([string]$authFile)

$config = [xml](Get-Content $authFile)
$config.AccessControls.AccessControl | % {
   $acl = Get-Acl $_.Path
   
   $_.Rules.Rule | % {
     $rule = New-Object Security.AccessControl.FileSystemAccessRule($_.Identity, $_.Rights, $_.Type)
     $acl.SetAccessRule($rule)
   }
   Set-Acl $_.Path $acl
}

XMLファイルをぐるぐる回してACLを設定していくだけ。

こんだけのスクリプトでかなりの作業減が見込めるので、やっぱりPowerShellはすごいですね。

現在のレート 5.0 (2人)

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

PowerShell

コメント

コメントを書く


 

  Country flag

biuquoteredbluegreenyellowPowerShellTextFile
  • コメント
  • プレビュー
Loading



Calendar

<<  3月 2010  >>
月曜火曜水曜木曜金曜土曜日曜
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

View posts in large calendar
Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2010 PowerShell from Japan!!