我想做类似于How to Remove all permissions for a specific user?的操作,但我想删除除所有人以外的文件所有者的文件访问权限。
是否可以以相对干净的方式做到这一点?
我想我可以调用get-acl C:\users\myusername\AppData\Local\Temp\TheFile.txt
,然后浏览那里列出的所有用户,并删除每个用户的所有权限(如上面链接的问题所述),但有更简单的方法吗?
答案 0 :(得分:2)
函数中的示例代码(简单地将其放在相同的脚本文件中,在您自己的代码之上):
function Remove-ACLEntries
{
[CmdletBinding()]
param(
[string]$File
)
$authusers = ((New-Object System.Security.Principal.SecurityIdentifier 'S-1-5-11').Translate([System.Security.Principal.NTAccount])).Value
$acl = Get-Acl $File
$acl.SetAccessRuleProtection($True, $False)
$owner = $acl.owner;
For($i=$acl.Access.Count - 1; $i -gt 0; $i--)
{
$rule = $acl.Access[$i]
if ($rule.IdentityReference -ne $owner -or $rule.IdentityReference -eq $authusers)
{
$acl.RemoveAccessRule($rule)
}
}
Set-ACL -Path $file -AclObject $acl | Out-Null
}
用法单个文件:
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。
问候,罗尼
答案 1 :(得分:0)
下面的示例将删除所有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"