使用 PowerShell 从 ACL 中完全删除用户

Sim*_*low 5 powershell access-control-list

我希望使用 PowerShell 删除用户的文件夹权限。我找到了很多有关如何删除用户权限的示例,但实际上我想完全删除用户。

相当于在 Windows 资源管理器中执行以下操作: 1. 右键单击​​文件夹并选择属性。2. 单击“安全”选项卡 3. 单击“编辑” 4. 突出显示用户或组。5. 单击“删除”

我试图在 PowerShell 中模仿“删除”的点击操作。

提前致谢。

Rya*_*ger 4

一般来说,Get-Acl和的组合Set-Acl应该能够完成你所需要的。但是,Get-Acl 有一个恼人的限制,可能表现为由于权限不足而无法使用 Set-Acl 写回修改后的 ACL(除非您也有权更改所有权)。有关该问题的更多信息可以在这个 SO 问题中找到。

无论如何,对于文件系统权限,您可以通过使用返回的对象中的方法来解决 Get-Acl 的限制Get-Item

$acl = (Get-Item C:\myfolder).GetAccessControl('Access')
Run Code Online (Sandbox Code Playgroud)

如果检查$acl.Access返回对象的属性,您会发现它是对象的集合FileSystemAccessRule(也称为 ACE 对象)。最终,您希望找到与您尝试删除的用户匹配的 ACE 子集,并忽略任何继承的子集。您实际上无法删除继承的 ACE,如果您尝试使用 GUI 删除它们,甚至 Windows 资源管理器也会告诉您同样的信息。无论如何,您可以通过以下方式获得 ACE 子集。

$acesToRemove = $acl.Access | ?{ $_.IsInherited -eq $false -and $_.IdentityReference -eq 'MYCOMPUTER\myuser' }
Run Code Online (Sandbox Code Playgroud)

现在您已经有了要删除的 ACE,只需将它们从原始 ACL 中删除并将其写回文件夹即可。

$acl.RemoveAccessRuleAll($acesToRemove)
Set-Acl -AclObject $acl C:\myfolder\
Run Code Online (Sandbox Code Playgroud)