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

使用方法

  1. 复制上面的代码保存为 .ps1 文件(例如 Add-RegPermission.ps1 )。
  2. 修改变量部分:
    • $RegistryPath :填入你要操作的完整注册表路径(支持 HKLM:、 HKCU:、 HKCR: 等 驱动器格式)。
    • $Identity :填入要授予权限的用户或组。
    • $Rights :根据需求选择权限类型。
  3. 右键 → 以管理员身份运行。
  4. 执行脚本:.\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 运行脚本验证效果。

登录

注册

重设密码

请输入您的用户名或电子邮箱地址。您会收到一封包含创建新密码链接的电子邮件。