因为注册表条目是项的属性(因而无法直接浏览),所以在处理它们时需要采用稍微不同的方法。

列出注册表条目

可以使用许多不同的方法检查注册表条目。最简单的方法是获取与项关联的属性名称。例如,若要查看注册表项 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion 中条目的名称,请使用 Get-Item。注册表项具有一个通用名称为“Property”的属性,该属性是项中注册表条目的列表。以下命令会选择 Property 属性,并扩展项以便在列表中显示它们:

PS> Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion | Select-Object -ExpandProperty Property
DevicePath
MediaPathUnexpanded
ProgramFilesDir
CommonFilesDir
ProductId

若要以可读性更强的形式查看注册表条目,请使用 Get-ItemProperty

PS> Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion


PSPath              : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO
                      FTWARE\Microsoft\Windows\CurrentVersion
PSParentPath        : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO
                      FTWARE\Microsoft\Windows
PSChildName         : CurrentVersion
PSDrive             : HKLM
PSProvider          : Microsoft.PowerShell.Core\Registry
DevicePath          : C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesDir     : C:\Program Files
CommonFilesDir      : C:\Program Files\Common Files
ProductId           : 76487-338-1167776-22465
WallPaperDir        : C:\WINDOWS\Web\Wallpaper
MediaPath           : C:\WINDOWS\Media
ProgramFilesPath    : C:\Program Files
PF_AccessoriesName  : Accessories
(default)           :

项的 Windows PowerShell 相关属性均以“PS”为前缀,例如 PSPathPSParentPathPSChildNamePSProvider

可以使用“.”符号来表示当前位置。可以使用 Set-Location 首先转到 CurrentVersion 注册表容器:

Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

或者,可以将内置 HKLM PSDrive 与 Set-Location 一起使用:

Set-Location -Path hklm:\SOFTWARE\Microsoft\Windows\CurrentVersion

然后,可以使用“.”符号表示当前位置以列出属性,而不指定完整路径:

PS> Get-ItemProperty -Path .
...
DevicePath          : C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesDir     : C:\Program Files
...

路径扩展的工作方式与其在文件系统中相同,因此可以使用 Get-ItemProperty -Path ..\Help 从此位置获取 HKLM:\SOFTWARE\Microsoft\Windows\HelpItemProperty 列表。

获取单个注册表条目

如果要检索注册表项中的特定条目,可以使用以下几种可能的方法之一。下面的示例在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion 中查找 DevicePath 的值。

在使用 Get-ItemProperty 时,使用 Path 参数指定项的名称,并使用 Name 参数指定 DevicePath 条目的名称。

PS> Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath


PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\
               Microsoft\Windows\CurrentVersion
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\
               Microsoft\Windows
PSChildName  : CurrentVersion
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry
DevicePath   : C:\WINDOWS\inf

此命令返回标准的 Windows PowerShell 属性以及 DevicePath 属性。

注意:

虽然 Get-ItemProperty 具有 FilterIncludeExclude 参数,但是无法使用它们按属性名称进行筛选。这些参数引用注册表项(它们是项路径),而不是引用注册表条目(它们是项属性)。

另一种方法是使用 Reg.exe 命令行工具。若要获取 reg.exe 的帮助,请在命令提示符下键入 reg.exe /?。若要查找 DevicePath 条目,请使用 reg.exe,如以下命令所示:

PS> reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion /v DevicePath

! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
    DevicePath  REG_EXPAND_SZ   %SystemRoot%\inf

也可以使用 WshShell COM 对象查找一些注册表条目,但此方法不适用于大型二进制数据或包括“\”等字符的注册表条目名称。使用 \ 分隔符将属性名称追加到项路径:

PS> (New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath")
%SystemRoot%\inf

创建新的注册表条目

若要将名为“PowerShellPath”的新条目添加到 CurrentVersion 项,请将 New-ItemProperty 与项的路径、条目名称以及条目的值一起使用。在下面的示例中,我们将采用 Windows PowerShell 变量 $PSHome 的值,该变量存储 Windows PowerShell 安装目录的路径。

使用以下命令可以将新条目添加到项,而且该命令还返回有关新条目的信息:

PS> New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome


PSPath         : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR
                 E\Microsoft\Windows\CurrentVersion
PSParentPath   : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR
                 E\Microsoft\Windows
PSChildName    : CurrentVersion
PSDrive        : HKLM
PSProvider     : Microsoft.PowerShell.Core\Registry
PowerShellPath : C:\Program Files\Windows PowerShell\v1.0

PropertyType 必须是下表中 Microsoft.Win32.RegistryValueKind 枚举成员的名称:

PropertyType 值 含义

Binary

二进制数据

DWord

一个有效的 UInt32 数字

ExpandString

一个可以包含动态扩展的环境变量的字符串

MultiString

多行字符串

String

任何字符串值

QWord

8 字节二进制数据

注意:

通过指定 Path 参数的值数组,可以将注册表条目添加到多个位置:

New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion, HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome

通过将 Force 参数添加到任何 New-ItemProperty 命令,也可以覆盖预先存在的注册表条目值。

重命名注册表条目

若要将 PowerShellPath 条目重命名为“PSHome”,请使用 Rename-ItemProperty

Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome

若要显示重命名后的值,请将 PassThru 参数添加到该命令中。

Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome -passthru

删除注册表条目

若要同时删除 PSHome 和 PowerShellPath 注册表条目,请使用 Remove-ItemProperty

Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PSHome
Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath




目录