在本文中,学习如何使用 PowerShell 获取注册表值并使用各种方法查询注册表条目。
让我们开始吧!
先决条件
本文中的所有示例都将使用 PowerShell 7.1 进行演示,这是本文发布时的最新版本。如果您选择,也可以使用 Windows PowerShell 5.1。您还应该对 PowerShell 驱动器 有一些基本的了解。
一些示例可能需要管理员权限才能正常运行。
使用 Get-ChildItem
获取注册表键和值
查找注册表键和值的一种最简单的方法之一是使用 Get-ChildItem
命令。这使用 PowerShell 获取注册表值,并通过枚举 PowerShell 驱动器中的项目来实现。在这种情况下,该 PowerShell 驱动器是通过运行 Get-PSDrive
找到的 HKLM 驱动器。
在 PowerShell 控制台中运行以下命令。
在下面的截图中,您可以看到:
- WindowsUpdate 注册表键的完整键路径
- 键 AU
- 带有相应值的 AU 键的注册表条目列表

关于上面的截图,有一个小细节需要注意。您可能注意到输出有些误导性。通常,PowerShell控制台输出代表对象的属性。Get-ChildItem
在这种情况下表现不同,因为该对象在技术上没有属性。额外的命令在后台运行,以产生您看到的显示格式。
使用Get-ItemProperty
获取注册表值
继续使用之前相同的注册表键,这次让我们使用Get-ItemProperty
命令,使输出更易读。
使用Get-ItemProperty
是获取注册表项属性及其值的最佳方法。运行以下命令:
在下面的截图中,您可以看到键和值的列表:
- 对于注册表容器AU
- 与PS开头的所有与PowerShell相关的属性

作为替代方案,您还可以通过使用.NET轻微快速地指定注册表项路径来获得相同的输出。以下命令使用.NET注册表类在PowerShell中获取注册表值:
使用Get-ItemPropertyValue
获取注册表值
现在是查看关键值的时候了。使用与之前相同的注册表容器,使用Get-ItemPropertyValue
cmdlet,让我们看看键NoAutoUpdate
的值。运行以下 PowerShell 命令:
使用Get-ItemPropertyValue
,您将获得更简洁的输出,仅显示值,而不是之前看到的任何其他信息。

在没有 PS 驱动器的情况下查询注册表
在本教程中,您一直在使用 PowerShell 驱动器来处理注册表。这种方式并不是唯一的方式;您还可以利用 .NET 并通过 .NET 类获取注册表信息!
例如,也许您需要使用 PowerShell 在远程计算机上获取 HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU\ : AutoUpate 的注册表值。
您可以通过 .NET 来实现:
- 在远程计算机上打开注册表连接。
2. 打开您要查找的特定注册表键。
3. 使用GetValue()
方法查询注册表键内部的注册表值的值。
使用 .NET 而不是 PowerShell 驱动器会快一点,并且是连接到远程计算机并使用 PowerShell 查询注册表键和值的简单方法。
使用Test-Path
测试注册表值
有时您只需要验证注册表值是否存在。您可以使用Test-Path
cmdlet 来执行此操作。
继续使用WindowsUpdate容器,通过运行以下PowerShell命令测试AU容器是否存在:
如果结果为True,则键或容器存在。但如果您需要测试某个值或条目是否存在呢?让我们为此测试构建一个自定义函数:
使用自定义函数,您输入键或容器的路径和名称,以及您要查找的值,自定义函数将返回True或False(如下图所示):

接下来的步骤:
请注意,您可以在PowerShell中使用Get-ChildItem
、Get-ItemProperty
和Get-ItemPropertyValue
来获取注册表值和键,还可以做什么呢?
如果您想了解有关使用PowerShell处理注册表的更多信息,请查看Microsoft Docs上标题为“Working with Registry Keys”的文章。您还可以在ATA博客文章Using Active Setup: How to Set a Registry Value in All Users Hives中找到设置注册表值的出色演示。
Source:
https://adamtheautomator.com/powershell-to-get-a-registry-value/