Powershell 删除对文件的所有权限(文件所有者除外)

Powershell 删除对文件的所有权限(文件所有者除外),powershell,Powershell,我想做一些类似的事情,但我想删除除文件所有者之外的所有人对该文件的所有访问权限 有没有可能以一种相对干净的方式做到这一点 我想我可以调用get acl C:\users\myusername\AppData\Local\Temp\TheFile.txt,然后遍历其中列出的所有用户,并删除每个用户的所有权限(如上面链接的问题所述),但是有没有更简单的方法呢?函数中的Examplecode(将其放在同一个脚本文件中,首先是您自己的代码): 使用单个文件: Remove-ACLEntries -Fil

我想做一些类似的事情,但我想删除除文件所有者之外的所有人对该文件的所有访问权限

有没有可能以一种相对干净的方式做到这一点

我想我可以调用
get acl C:\users\myusername\AppData\Local\Temp\TheFile.txt
,然后遍历其中列出的所有用户,并删除每个用户的所有权限(如上面链接的问题所述),但是有没有更简单的方法呢?

函数中的Examplecode(将其放在同一个脚本文件中,首先是您自己的代码):

使用单个文件:

Remove-ACLEntries -File c:\your\path\to\file.txt
使用多个文件:

$files = Get-Childitem c:\your\path -Recurse
foreach ($file in $files){ Remove-ACLEntries -File $file.Fullname }
注意:您用于操作此功能的用户必须拥有自己对该文件的完全访问权限。如果此功能不工作,请尝试在Adminmode下运行powershell


您好,Ronny

下面的示例删除所有ACL,并将ACL设置为允许文件所有者完全控制

$acl = Get-Acl "$filePath"
$object = New-Object System.Security.Principal.Ntaccount($acl.owner)
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($acl.owner,"FullControl","Allow")
$acl.SetOwner($object)
$acl.SetAccessRuleProtection($true,$false)
$acl.SetAccessRule($AccessRule)
#$acl.SetAccessRule($sysUserAccessRule)
$acl | Set-Acl "$filePath"

定义“更容易”
icacls TheFile.txt/grant:r username:f/heritation:r
-删除所有继承的和显式的权限,并将完全控制权授予“username”。这更简单吗?不这样认为,通过Get-ACL cmdlet循环文件以获取所有者,然后遵循与citedI测试相同的过程,您的思路是正确的我接受了TessellatingHeckler提供的建议。这应该是最简单的方法。“获取acl”可能会帮助您获得所有者,然后使用icacls.exe设置权限。Ronny,回答很好。谢谢!非常好-但当我运行它时-它删除了所有ACL-包括以前授予所有者的ACL。这不会删除已验证的用户条目。非常好。我正在寻找一个如何使用
新对象
访问规则的示例或者一个文件,而不是一个目录(可以为其设置传播选项),我注释掉了
$acl.SetAccessRule($sysUserAccessRule)
,因为
$sysUserAccessRule
没有在其他地方引用。设置
$filePath
应该是直观的。除此之外,我可以确认此代码是否有效。
$acl = Get-Acl "$filePath"
$object = New-Object System.Security.Principal.Ntaccount($acl.owner)
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($acl.owner,"FullControl","Allow")
$acl.SetOwner($object)
$acl.SetAccessRuleProtection($true,$false)
$acl.SetAccessRule($AccessRule)
#$acl.SetAccessRule($sysUserAccessRule)
$acl | Set-Acl "$filePath"