我正在使用 Windows 10 20H2,在 PowerShell Desktop 5.1.19041.610 和 PowerShell Core 7.1.1 上,我已多次成功重现此问题且没有失败。
问题:Test-Path 仅适用于两个 PowerShell 注册表驱动器(缩短的注册表配置单元名称):
HKCU:
和HKLM:
它们分别是HKEY_CURRENT_USER
和的缩写HKEY_LOCAL_MACHINE
。
在 PowerShell 中,它们的全名是:
Registry::HKEY_CURRENT_USER
和Registry::HKEY_LOCAL_MACHINE
分别。
但是有五个注册表配置单元,另外三个是:
HKEY_CLASSES_ROOT
,HKEY_CURRENT_CONFIG
和HKEY_USERS
他们的简称:
HKCR:
,HKCC:
和HKU:
Test-Path
找不到驱动器,但Test-Path
如果提供全名就可以找到它们:
TEST-PATH HKCR:
TEST-PATH HKCU:
TEST-PATH HKLM:
TEST-PATH HKU:
TEST-PATH HKCC:
TEST-PATH REGISTRY::HKEY_CLASSES_ROOT
TEST-PATH REGISTRY::HKEY_CURRENT_CONFIG
TEST-PATH REGISTRY::HKEY_USERS
$PSVersionTable
我很好奇并且想知道它为什么会表现得如此。
有人可以解释一下吗?
我已确认其他三个驱动器也不能与其他 cmdlet 一起使用,我该如何使用这三个注册表驱动器?
答案1
它们不是默认创建的,但您可以创建它们:
PS C:\>New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
Name Used (GB) Free (GB) Provider Root CurrentLocation
---- --------- --------- -------- ---- ---------------
HKCR Registry HKEY_CLASSES_ROOT
PS C:\>Test-Path HKCR:
True
PS C:>
答案2
是的,根据 Microsoft Docs,PowerShell 注册表提供程序默认仅提供两个 PSDrive:
HKCU:
和HKLM:
它们可以像文件系统一样被遍历。
要获取所有注册表 PSDrive:
Get-PSDrive -PSProvider Registry | Select-Object Name, Provider, Root
它将返回如下内容:
PS C:\Windows\System32> Get-PSDrive -PSProvider Registry | Select-Object Name, Provider, Root
Name Provider Root
---- -------- ----
HKCU Microsoft.PowerShell.Core\Registry HKEY_CURRENT_USER
HKLM Microsoft.PowerShell.Core\Registry HKEY_LOCAL_MACHINE
New-PSDrive -PSProvider Registry -Root HKEY_CLASSES_ROOT -Name HKCR
New-PSDrive -PSProvider Registry -Root HKEY_CURRENT_CONFIG -Name HKCC
New-PSDrive -PSProvider Registry -Root HKEY_USERS -Name HKU
这些将为PSDrives
其他三个蜂巢创建:
PS C:\Windows\System32> Get-PSDrive -PSProvider Registry | Select-Object Name, Provider, Root
Name Provider Root
---- -------- ----
HKCC Microsoft.PowerShell.Core\Registry HKEY_CURRENT_CONFIG
HKCR Microsoft.PowerShell.Core\Registry HKEY_CLASSES_ROOT
HKCU Microsoft.PowerShell.Core\Registry HKEY_CURRENT_USER
HKLM Microsoft.PowerShell.Core\Registry HKEY_LOCAL_MACHINE
HKU Microsoft.PowerShell.Core\Registry HKEY_USERS
Test-Path
:
PS C:\Windows\System32> Test-Path HKCC:
True
PS C:\Windows\System32> Test-Path HKCR:
True
PS C:\Windows\System32> Test-Path HKCU:
True
PS C:\Windows\System32> Test-Path HKLM:
True
PS C:\Windows\System32> Test-Path HKU:
True
PS C:\Windows\System32>