无法使用powershell从32位版本的win2008中读取64位注册表项



我试图在使用powershell的32位windows 2008的64位版本的windows server 2008 r2上读取以下注册表项,但该值为空白,不返回任何值。

可以帮助我如何从32位服务器读取64位reg密钥吗?

$line = "WIN-QENOBBC64B8"
$regkey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, $line)
$ref = $regKey.OpenSubKey("SOFTWAREMicrosoftMicrosoft SQL ServerInstance NamesSQL")
$ref

从32位powershell中,通过从命令行调用64位版本的reg.exe来访问64位注册表。诀窍在于使用系统路径而不是system32,这会使您脱离syswow64沙箱,进入真正的64位注册表。

C:WindowsSysNativereg.exe QUERY "HKLMSOFTWAREMicrosoftMicrosoft SQL ServerInstance NamesSQL"

如果你在.NET 4上运行PowerShell(看看$PSVersionTable的输出),那么你可以使用新的RegistryView枚举(和OpenRemoteBaseKey重载)与[Microsoft.Win32.RegistryView]::Registry64一起能够查看64位注册表。

或者你可以使用PowerShell远程,因为默认情况下你将连接到远程机器上的64位PowerShell端点,例如:

$line = "WIN-QENOBBC64B8"
Invoke-Command -ComputerName $line {Get-Item 'HKLM:SoftwareMicrosoftMicrosoft SQL ServerInstance NamesSQL'}

请注意,您可能必须在远程服务器上启用远程处理(不记得PowerShell远程处理是否在服务器上默认启用)。您可以通过在远程服务器上在提升的/admin PowerShell提示符中运行以下命令来完成此操作:

Set-ExecutionPolicy RemoteSigned
Enable-PSRemoting

如果要查找值,请尝试将此作为最后一行:

$ref.GetValueNames()

或者如果您正在查找密钥:

$ref.GetSubKeyNames()

最新更新