首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell -无法修改注册表项ACL,尽管它是所有者

Powershell -无法修改注册表项ACL,尽管它是所有者
EN

Stack Overflow用户
提问于 2022-04-28 08:00:03
回答 1查看 147关注 0票数 0

我正在尝试编写一个修改注册表值的脚本。在修改它之前,我必须删除当前用户的“拒绝”权限规则,该用户也是注册表项的所有者,具有完全的控制权限。由于当前用户是所有者并具有完全控制,因此能够手动修改注册表项权限并删除“拒绝”规则。但是到目前为止,我还不能用powershell来做这件事,因为我总是会出现一个“拒绝访问”的错误。这就是我迄今为止尝试过的:

代码语言:javascript
复制
$currentuser = $env:UserDomain + "\" + $env:UserName
$regpath = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.htm\UserChoice"
$acl = Get-Acl -path $regpath
$rule = New-Object System.Security.AccessControl.RegistryAccessRule($currentuser,"SetValue","Deny")
$Acl.RemoveAccessRuleAll($Rule)
$acl | Set-Acl -Path $regpath

我遗漏了什么?有什么方法可以用powershell做到这一点吗?我不想利用任何第三方。提前感谢您的帮助

EN

回答 1

Stack Overflow用户

发布于 2022-04-28 16:14:29

由于@Tomalak的帮助,我能够用以下代码删除拒绝规则:

代码语言:javascript
复制
$key = [Microsoft.Win32.Registry]::CurrentUSer.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.htm\UserChoice",[Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree,[System.Security.AccessControl.RegistryRights]::ChangePermissions)
$acl = $key.GetAccessControl()
$currentuser = $env:UserDomain + "\" + $env:UserName
$rule = $acl.Access | where {
        $_.IdentityReference -eq $currentuser `
        -and $_.IsInherited -eq $False `
        -and $_.RegistryRights -eq "SetValue" `
        -and $_.AccessControlType -eq "Deny"
    }
    if ($rule) {
        $acl.RemoveAccessRuleSpecific($rule)
        $key.SetAccessControl($acl)
        Write-Debug 'Rule removed'
    } else {
        Write-Debug 'No matching rule found'
    }
$key.Close()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72040038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档