#注册表
注册表是 Windows 用于保存系统和应用程序配置的层次化数据库。PowerShell 通过 Registry 提供程序把注册表呈现为驱动器,默认提供 HKLM:(HKEY_LOCAL_MACHINE)和 HKCU:(HKEY_CURRENT_USER)。
#浏览注册表
> Get-ChildItem -Path HKLM:\SOFTWARE
> Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion'
递归查看子项:
> Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft -Recurse
注册表项类似于目录,注册表值类似于项中的属性。
#读取注册表值
使用 Get-ItemProperty 读取某个项下的值:
> Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name ProductName
也可以先获取整个项,再访问属性:
> $info = Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion'
> $info.ProductName
#创建和修改注册表值
先创建注册表项(如果不存在):
> New-Item -Path 'HKCU:\Software\Demo' -Force
使用 New-ItemProperty 创建值:
> New-ItemProperty -Path 'HKCU:\Software\Demo' -Name Version -Value '1.0' -PropertyType String
> New-ItemProperty -Path 'HKCU:\Software\Demo' -Name Enabled -Value 1 -PropertyType DWord
使用 Set-ItemProperty 修改已有值:
> Set-ItemProperty -Path 'HKCU:\Software\Demo' -Name Version -Value '1.1'
常用 -PropertyType 值包括 String、ExpandString、Binary、DWord、MultiString 和 QWord。
#删除注册表值
> Remove-ItemProperty -Path 'HKCU:\Software\Demo' -Name Version
删除整个注册表项及其子项:
> Remove-Item -Path 'HKCU:\Software\Demo' -Recurse
操作前可以使用 -WhatIf 预览:
> Remove-Item -Path 'HKCU:\Software\Demo' -Recurse -WhatIf
#常见根键
| 驱动器 | 对应注册表根键 | 说明 |
|---|---|---|
HKLM: | HKEY_LOCAL_MACHINE | 本机配置,修改通常需要管理员权限 |
HKCU: | HKEY_CURRENT_USER | 当前用户配置 |
#注意事项
- 修改
HKLM:下的内容通常需要管理员权限。 - 不同程序可能读取 32 位或 64 位注册表视图,跨位数访问时需注意重定向。
- 脚本中应避免依赖具体路径或值,必要时先判断项和值是否存在。