删除文件所有者除文件所有者以外的所有权限

时间:2017-04-26 00:41:50

标签: powershell

我想做类似于How to Remove all permissions for a specific user?的操作,但我想删除除所有人以外的文件所有者的文件访问权限。

是否可以以相对干净的方式做到这一点?

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

2 个答案:

答案 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"