PowerShellを使用してフォルダー権限からユーザーを削除したいのですが。ユーザー権限を削除する方法の例をたくさん見つけましたが、実際にはユーザーを完全に削除したいと思っています。
同等のことは、Windowsエクスプローラーで以下を実行することです。1.フォルダーを右クリックし、[プロパティ]を選択します。 2. [セキュリティ]タブをクリックします。3. [編集]をクリックします。4.ユーザーまたはグループを強調表示します。 5. [削除]をクリックします
PowerShellで模倣しようとしているのは、削除をクリックすることです。
前もって感謝します。
Simonが提案したように、次のコマンドは、特定のユーザーまたはグループを削除するために探しているものを実現します。
NTFSSecurityモジュールの使用( https://gallery.technet.Microsoft.com/scriptcenter/1abd77a5-9c0b-4a2b-acef-90dbb2b84e85 )
Remove-NTFSAccess -AccessRights FullControl -Account DOMAIN\Group -Path c:\temp -AccessType Deny -AppliesTo ThisFolderSubfoldersAndFiles
Remove-NTFSAccess -AccessRights FullControl -Account DOMAIN\Group -Path c:\temp -AccessType Allow -AppliesTo ThisFolderSubfoldersAndFiles
明示的に除外したグループ以外のすべてのセキュリティグループをフォルダーから削除する小さなスクリプトを作成しました。
$path = "C:\Path\To\Folder"
$users = @{}
$users = Get-NTFSAccess $path | Where-Object {$_.Account -ne "DOMAIN\Exclude"} | Select-Object Account
foreach ($user in $users) {
$removalAccount = $user.Account
Write-Host "Removing account - $($removalAccount)"
Remove-NTFSAccess -Path $path -Account $removalAccount -AccessRights FullControl -AccessType Allow
Remove-NTFSAccess -Path $path -Account $removalAccount -AccessRights FullControl -AccessType Deny
}
一般的に言えば、 Get-Acl
と Set-Acl
の組み合わせは、必要なことを達成できるはずです。ただし、Get-Aclには厄介な制限があり、権限が不十分なため(所有権も変更する権限がない場合)、Set-Aclを使用して変更されたACLを書き戻すことができないことが明らかになります。その問題の詳細は this SO question にあります。
いずれの場合でも、ファイルシステムのアクセス許可については、代わりにGet-Item
によって返されるオブジェクトからのメソッドを使用することにより、Get-Aclの制限を回避できます。
$acl = (Get-Item C:\myfolder).GetAccessControl('Access')
返されたオブジェクトの$acl.Access
プロパティを調べると、それが FileSystemAccessRule
オブジェクト(別名ACEオブジェクト)のコレクションであることがわかります。最終的には、削除しようとしているユーザーに一致するACEのサブセットを見つけ、継承されたものはすべて無視する必要があります。継承されたACEを実際に削除することはできません。Windowsエクスプローラーでも、GUIを使用してそれらを削除しようとすると、多くのことが通知されます。いずれにせよ、ACEのサブセットを取得する方法は次のとおりです。
$acesToRemove = $acl.Access | ?{ $_.IsInherited -eq $false -and $_.IdentityReference -eq 'MYCOMPUTER\myuser' }
削除するACEを取得したので、元のACLからACEを削除して、フォルダーに書き戻すだけです。
$acl.RemoveAccessRuleAll($acesToRemove)
Set-Acl -AclObject $acl C:\myfolder\