Sim*_*low 5 powershell access-control-list
我希望使用 PowerShell 删除用户的文件夹权限。我找到了很多有关如何删除用户权限的示例,但实际上我想完全删除用户。
相当于在 Windows 资源管理器中执行以下操作: 1. 右键单击文件夹并选择属性。2. 单击“安全”选项卡 3. 单击“编辑” 4. 突出显示用户或组。5. 单击“删除”
我试图在 PowerShell 中模仿“删除”的点击操作。
提前致谢。
一般来说,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)
| 归档时间: |
|
| 查看次数: |
43542 次 |
| 最近记录: |