回答編集履歴

1 誤字修正。

stknohg

stknohg score 790

2018/03/29 13:08  投稿

こんにちは。
stack overflowのこちらの記事が役に立つと思います。
Stack Overflowのこちらの記事が役に立つと思います。
* [Using powershell to remove group from an NTFS folder fails with SeSecurityPrivilege after removing inheritence](https://stackoverflow.com/questions/32598336/using-powershell-to-remove-group-from-an-ntfs-folder-fails-with-sesecurityprivil)
----
基本的にはACLのアクセスルールを消すには`DirectorySecurity`(`FileSecurity`)クラスの`RemoveAccessRule`メソッドを使います。
```ps1
# リンク先の記事より引用
$acl = Get-Acl $NewFolder
# 削除したいアクセスルールを選択する ※ここは個別に変える必要があります
$RemoveDomainUsersACLRule = $acl | Select -ExpandProperty Access | where-object {$_.IdentityReference -eq $UserIdentityReference}
# 削除
$acl.RemoveAccessRule($RemoveDomainUsersACLRule)
```
また、先述の記事にある様に親フォルダからアクセス権を継承している場合は削除できないので、フォルダやファイルによっては事前にアクセス権の継承を解除しておく必要があります。
```ps1
# リンク先の記事より引用
$acl = Get-Acl $NewFolder
# アクセス権の継承を解除
$acl.SetAccessRuleProtection($true,$true)
# 変更を確定
Set-Acl -aclobject $acl -Path $NewFolder
```
最後に、私も詳細は把握していないのですが、アクセスルールを削除した後に`Set-Acl`を実行すると特権エラーを出す既知の不具合がある様で、この場合は`DirectoryInfo`(`FileInfo`)クラスの`SetAccessControl`メソッドを使うと回避できるそうです。
```
# リンク先の記事より引用
(Get-Item $NewFolder).SetAccessControl($acl)
```
(実際手元の環境で試したところ特権エラーの発生と回避を確認できました。)

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る