我正在尝试编写一个修改注册表值的脚本。在修改它之前,我必须删除当前用户的“拒绝”权限规则,该用户也是注册表项的所有者,具有完全的控制权限。由于当前用户是所有者并具有完全控制,因此能够手动修改注册表项权限并删除“拒绝”规则。但是到目前为止,我还不能用powershell来做这件事,因为我总是会出现一个“拒绝访问”的错误。这就是我迄今为止尝试过的:
$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做到这一点吗?我不想利用任何第三方。提前感谢您的帮助
发布于 2022-04-28 16:14:29
由于@Tomalak的帮助,我能够用以下代码删除拒绝规则:
$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()https://stackoverflow.com/questions/72040038
复制相似问题