windows系统给注册表某个项加权限。用脚本
以下是使用 为 Windows 注册表某个键(项)添加权限的脚本。脚本使用标准的 Get-Acl 和 Set-Acl cmdlet 操作注册表的 ACL,适用于 Windows 10/11 和 Server 系统。
重要提醒
- **必须以管理员身份运行 ** (右键 → “以管理员身份运行”),否则会失败。
- 修改系统关键注册表项(如 HKLM 下)可能导致系统不稳定,请先备份注册表或在测试环境验证。
- 如果当前账户对该键没有“更改权限”权限,脚本会报错,此时可能需要先接管所有权(Take Ownership),我会在后面提供补充方法。
完整 脚本
# 参数说明(可根据需要修改)
$RegistryPath = "HKLM:\SOFTWARE\YourKeyHere" # 要修改权限的注册表路径,例如 HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion
$Identity = "BUILTIN\Users" # 要授予权限的用户或组,例如:
# "Everyone" # 所有人
# "BUILTIN\Users" # Users 组
# "BUILTIN\Administrators" # 管理员组
# "DOMAIN\UserName" # 域用户
# "$env:USERNAME" # 当前用户
$Rights = "FullControl" # 权限类型,可选值(RegistryRights):
# FullControl - 完全控制
# ReadKey - 只读
# QueryValues - 查询值
# SetValue - 设置值
# CreateSubKey - 创建子键
# Delete - 删除
# WriteKey - 写入键
# 多个权限可以用逗号组合,例如 "SetValue,CreateSubKey"
$InheritFlags = "ContainerInherit,ObjectInherit" # 继承方式:权限是否应用到子键和值(推荐保留)
$Propagation = "None" # 传播方式(一般用 None)
$AccessType = "Allow" # Allow = 允许,Deny = 拒绝
# 创建访问规则
$Rule = New-Object System.Security.AccessControl.RegistryAccessRule (
$Identity,
[System.Security.AccessControl.RegistryRights]$Rights,
[System.Security.AccessControl.InheritanceFlags]$InheritFlags,
[System.Security.AccessControl.PropagationFlags]$Propagation,
[System.Security.AccessControl.AccessControlType]$AccessType
)
# 获取当前 ACL 并添加新规则
$Acl = Get-Acl -Path $RegistryPath
$Acl.AddAccessRule($Rule)
# 应用新的 ACL
Set-Acl -Path $RegistryPath -AclObject $Acl
Write-Host "权限已成功添加给 $Identity 到 $RegistryPath" -ForegroundColor Green
使用方法
- 复制上面的代码保存为 .ps1 文件(例如 Add-RegPermission.ps1 )。
- 修改变量部分:
- $RegistryPath :填入你要操作的完整注册表路径(支持 HKLM:、 HKCU:、 HKCR: 等 驱动器格式)。
- $Identity :填入要授予权限的用户或组。
- $Rights :根据需求选择权限类型。
- 右键 → 以管理员身份运行。
- 执行脚本:.\Add-RegPermission.ps1 (如果提示执行策略问题,先运行 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser )。
如果没有权限修改 ACL(常见于系统保护键)
有些键(如 HKLM 下的大部分键)默认只有 TrustedInstaller 或 SYSTEM 有更改权限的权利。此时需要先 接管所有权 :
$RegistryPath = "HKLM:\SOFTWARE\YourKeyHere"
# 接管所有权给当前管理员
$Key = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey("SOFTWARE\YourKeyHere",[Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree,[System.Security.AccessControl.RegistryRights]::TakeOwnership)
$Acl = $Key.GetAccessControl()
$Acl.SetOwner([System.Security.Principal.NTAccount]"Administrators")
$Key.SetAccessControl($Acl)
$Key.Close()
# 然后再运行上面的主脚本授予权限
测试建议
先在安全的键上测试,例如创建一个测试键:
New-Item -Path "HKCU:\Software\TestKey" -Force
然后对 HKCU:\Software\TestKey 运行脚本验证效果。