我想做类似的事情,类似于如何删除特定用户的所有权限?文件的所有者。
有可能以相对干净的方式这样做吗?
我想我可以致电get-acl C:usersmyusernameAppDataLocalTempTheFile.txt
,然后浏览列出的所有用户,然后删除每个用户的所有权利(如上所述的链接问题中所述(,但是有一种更简单的方法吗?
函数中的extepepode(简单地将其放在同一脚本文件中,最重要的是您自己的代码(:
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:yourpathtofile.txt
使用多个文件:
$files = Get-Childitem c:yourpath -Recurse
foreach ($file in $files){ Remove-ACLEntries -File $file.Fullname }
注意:您使用的用户操作此功能必须自己在文件中充分访问。如果该功能不起作用,请尝试在AdminMode中运行PowerShell。
问候,罗尼
下面的示例删除了所有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"