除了文件所有者之外,将所有权限删除到文件中



我想做类似的事情,类似于如何删除特定用户的所有权限?文件的所有者。

有可能以相对干净的方式这样做吗?

我想我可以致电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"

最新更新