好吧,在研究了一段时间之后,按照规范来说, this:
HKEY_LOCAL_MACHINE\SOFTWARE\Path\To\Something
Is always通往钥匙的路径。
Look at reg.exe query
。看看怎么样Get-ItemProperty
作品。通知于regedit.exe
您可以复制键名称,但不能复制特定值的“路径”。查看.reg 文件是如何写入的。看着Registry.GetValue() https://msdn.microsoft.com/en-us/library/microsoft.win32.registry.getvalue(v=vs.110).aspx and Registry.SetValue() https://msdn.microsoft.com/en-us/library/microsoft.win32.registry.setvalue(v=vs.110).aspx. Or Registry.LocalMachine.OpenSubKey().GetValue()
。微软显然认为注册表路径总是指向密钥。
如果您有正在使用的软件HKEY_LOCAL_MACHINE\SOFTWARE\Path\To\A\Value
引用注册表中的值,那么它们就没有使用 Windows 可以理解的标准注册表路径。
这就是为什么你要这样运行这些:
reg.exe query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "ProductName"
Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name "ProductName"
[Microsoft.Win32.Registry]::LocalMachine.OpenSubKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion').GetValue('ProductName')
[Microsoft.Win32.Registry]::GetValue('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion','ProductName', $false)
最后一个很好,因为它不会出错。如果找不到该值,则返回第三个参数。然而,据我所知,它确实需要在开始时使用长蜂巢名称。
So, Test-Path -Container
可以告诉你这是否是一把钥匙。Microsoft.Win32.Registry.GetValue()
可以通过一些操作告诉你它是否是一个值。
原始答案(这不起作用):
Use Test-Path
:
$path = 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\SomeJunkHereToTestFailure'
# Is it a Key?
Test-Path -Path $path -PathType Container
# Is it a Value?
Test-Path -Path $path -PathType Leaf