2014年2月7日金曜日

PowerShellでNTFSのACLをいじる(備忘録レベル)

2014.2.13修正 ACLの適用範囲や継承は既存の設定を引き継ぐよう修正

仕事で下記スクリプトを作ったので記録として残しておく。
機能は、引数で与えたフォルダに対し、セキュリティグループ "domainname\groupprefix*" の「サブフォルダーとファイルの削除」権限を削除するというもの。
このスクリプトをベースに、色々と応用が効くはず。
$Path = $args[0]
$acl = Get-Acl $Path
$groupAccess = $acl.access | where {$_.IdentityReference -like "domainname\groupprefix*"}
if ($groupAccess){
    $Access = $groupAccess.IdentityReference

    "Modifying Permissions For $Access"
    $Permission = $groupAccess.FileSystemRights
    "Before: $Permission"
    $Permission = ($Permission -replace "DeleteSubdirectoriesAndFiles(, )*","") -replace ", $", ""
    "After: $Permission"
    $inherit = $groupAccess.InheritanceFlags
    $propagation = $groupAccess.PropagationFlags
    $AccessRule = New-Object system.security.AccessControl.FileSystemAccessRule($Access, $Permission, $inherit, $propagation, "Allow")

    $AccessModification = New-Object system.security.AccessControl.AccessControlModification
    $AccessModification.value__ = 2
    $Modification = $False
    $acl.ModifyAccessRule($AccessModification, $AccessRule, [ref]$Modification) | out-null
}
Set-Acl -aclobject $acl -Path $Path

0 コメント:

コメントを投稿