URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

アクセス権の継承を無効にするPowerShellスクリプト

ここを無効にする

 長年運用してきたファイルサーバに大がかりなアクセス権変更をやろうと思うとかなり気の遠くなる作業になりますよね。手を抜けるところは適度に手を抜く主義なので、一律で変えられる部分はスクリプト等を活用したいところ。
 その中の一つで「対象フォルダの下にあるサブフォルダ全てに対して、アクセス権の継承を無効化する」という作業のためのスクリプトです。


 ここでのアクセス権とはWindowsのNTFSアクセス権の話です。なので、PowerShellにしました。


$TargetPath = "D:\Shared" if (Test-Path -Path $TargetPath -PathType Container) { $SubFolders = Get-ChildItem -Path $TargetPath -Force | Where-Object { $_.PSIsContainer } } else { Write-Output "Target folder not found!" exit 1 } foreach ($SubFolder in $SubFolders) { Write-Output "Target: $SubFolder" $Acl = Get-Acl -Path $SubFolder.FullName $Acl.SetAccessRuleProtection($true,$true) try { $Acl | Set-Acl -Path $SubFolder.FullName } catch { $_.Exception.Message } } exit

 1行目で設定したフォルダの下にあるフォルダが継承無効化を設定する対象になります。
 なお、継承を無効化にした上で既存のアクセス権は維持します(GUIで設定した際に「継承されたアクセス許可をこのオブジェクトの明示的なアクセス家許可に変換します。」を選択するのと同じ)。

 いろいろ小細工はしようとするけど、ファイルサーバのアクセス権は一律には設定できない部分が多いので、割と辛い…。