使用注册表条目Working with Registry Entries

本文内容

因为注册表条目是项的属性而无法直接浏览,因此我们在使用它们时需要采取略有不同的方式。

列出注册表条目Listing Registry Entries

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

  1. Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion |
  2. Select-Object -ExpandProperty Property
  1. DevicePath
  2. MediaPathUnexpanded
  3. ProgramFilesDir
  4. CommonFilesDir
  5. ProductId

若要在可读性更强的窗体中查看注册表条目,请使用Get-ItemProperty:

  1. Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
  1. PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO
  2. FTWARE\Microsoft\Windows\CurrentVersion
  3. PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO
  4. FTWARE\Microsoft\Windows
  5. PSChildName : CurrentVersion
  6. PSDrive : HKLM
  7. PSProvider : Microsoft.PowerShell.Core\Registry
  8. DevicePath : C:\WINDOWS\inf
  9. MediaPathUnexpanded : C:\WINDOWS\Media
  10. ProgramFilesDir : C:\Program Files
  11. CommonFilesDir : C:\Program Files\Common Files
  12. ProductId : 76487-338-1167776-22465
  13. WallPaperDir : C:\WINDOWS\Web\Wallpaper
  14. MediaPath : C:\WINDOWS\Media
  15. ProgramFilesPath : C:\Program Files
  16. PF_AccessoriesName : Accessories
  17. (default) :

该项的 Windows PowerShell 相关的属性全都带有“PS”前缀,例如 PSPathPSParentPathPSChildNamePSProvider

你可以将“..”表示法用于引用当前位置。可以使用Set-Location更改为CurrentVersion注册表容器第一个:

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

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

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

然后,你可以将“..”表示法用于当前位置以列出属性,而无需指定完整路径:

  1. Get-ItemProperty -Path .
  1. ...
  2. DevicePath : C:\WINDOWS\inf
  3. MediaPathUnexpanded : C:\WINDOWS\Media
  4. ProgramFilesDir : C:\Program Files
  5. ...

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

获取单个注册表条目Getting a Single Registry Entry

如果你希望在注册表项中检索特定条目,可以使用几种可能的方法之一。本示例查找的值DevicePathHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

使用Get-ItemProperty,使用路径参数指定的密钥名称和名称参数指定的名称DevicePath条目。

  1. Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath
  1. PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\
  2. Microsoft\Windows\CurrentVersion
  3. PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\
  4. Microsoft\Windows
  5. PSChildName : CurrentVersion
  6. PSDrive : HKLM
  7. PSProvider : Microsoft.PowerShell.Core\Registry
  8. DevicePath : C:\WINDOWS\inf

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

备注

尽管Get-ItemProperty筛选器Include,和排除参数,它们不能用于按属性名称进行筛选。这些参数引用注册表项,即项路径和不注册表项。注册表条目是项属性。

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

  1. reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion /v DevicePath
  1. ! REG.EXE VERSION 3.0
  2. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
  3. DevicePath REG_EXPAND_SZ %SystemRoot%\inf

还可以使用 WshShell COM 对象查找某些注册表条目,尽管此方法对大型二进制数据或包含诸如“\”字符的注册表条目名称不起作用也是如此。将属性名称附加到带有 \ 分隔符的项路径:

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

设置一个注册表项Setting a Single Registry Entry

如果你想要更改注册表项中的特定项,可以使用几个可能的方法之一。此示例修改路径下的项HKEY_CURRENT_USER\Environment路径项指定在哪里可以找到可执行文件。

  • 检索的当前值路径条目使用Get-ItemProperty
  • 添加新值,将其与分离;
  • 使用Set-ItemProperty与指定的键、 条目名称和要修改的注册表项值。
  1. $value = Get-ItemProperty -Path HKCU:\Environment -Name Path
  2. $newpath = $value.Path += ";C:\src\bin\"
  3. Set-ItemProperty -Path HKCU:\Environment -Name Path -Value $newpath

备注

尽管Set-ItemProperty筛选器Include,和排除参数,它们不能用于按属性名称进行筛选。这些参数引用注册表项(即项路径),而不引用注册表条目(即项属性)。

另一种方法是使用 Reg.exe 命令行工具。有关 reg.exe 的帮助,请键入 reg.exe /?

下面的示例更改路径条目通过删除在上面的示例添加的路径。Get-ItemProperty 仍可用于检索要避免必须分析从返回的字符串的当前值reg querySubStringLastIndexOf方法用于检索最后一个路径添加到路径条目。

  1. $value = Get-ItemProperty -Path HKCU:\Environment -Name Path
  2. $newpath = $value.Path.SubString(0, $value.Path.LastIndexOf(';'))
  3. reg add HKCU\Environment /v Path /d $newpath /f
  1. The operation completed successfully.

创建新注册表条目Creating New Registry Entries

若要将一个名为"PowerShellPath"的新项添加到CurrentVersion密钥、 使用New-ItemProperty替换为密钥、 条目名称和条目的值的路径。对于此示例中,我们将采用 Windows PowerShell 变量的值$PSHome,其中可存储 Windows PowerShell 安装目录的路径。

你可以通过使用以下命令来将新条目添加到项,该命令还会返回有关新条目的信息:

  1. New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome
  1. PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
  2. PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
  3. PSChildName : CurrentVersion
  4. PSDrive : HKLM
  5. PSProvider : Microsoft.PowerShell.Core\Registry
  6. PowerShellPath : C:\Program Files\Windows PowerShell\v1.0

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

PropertyType 值含义
Binary二进制数据
DWord一个数字,类型为有效的 UInt32
ExpandString一个字符串,可包含动态扩展的环境变量
MultiString一个多行字符串
字符串任意字符串值
QWord8 字节的二进制数据

备注

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

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

此外可以替代预先存在的注册表条目值,通过添加Force参数到任何New-ItemProperty命令。

重命名注册表条目Renaming Registry Entries

若要重命名PowerShellPath条目为"PSHome",使用Rename-ItemProperty:

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

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

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

删除注册表条目Deleting Registry Entries

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

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