久しぶりにネタを投下します。
マシンのセットアップ作業なんかをしていると、フォルダのアクセス権限を設定する作業なんてのがよくありますよね(実際今やってます)。
そんな時にスクリプトでパパッとやれたらなと思って、サクッと作ってみました。一括で設定するので、設定ファイルを読み込んでアクセス権限を設定する事にします。
まず、以下のような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はすごいですね。