注册表上的 Powershell 测试路径取决于主机环境

Powershell Test-Path on registry depends on host environment

我运行陷入了一个奇怪的境地。

我想知道这个注册表项是否被 运行ning:

Test-Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\RefCount\SQLSysClrTypes12"

这个注册表确实存在于我的测试机器上。如果我 运行 此脚本使用 PowerShell 控制台 (%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe),它将 return true.

但是

如果我 运行 这个脚本首先打开命令提示符,然后 运行 PowerShell (C:\Windows\system32>C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell。 exe)

那么它将找不到注册表项。

我还尝试了一些其他注册表项,其中一些对两个主机都有效。我也在管理员模式下测试过,没有什么不同。

这些 PowerShell 可执行文件(32 位与 64 位)之间有何不同?

为什么一个 return 会得到与另一个不同的结果(他们对注册表的访问权限不同)?

我 运行 这样做的原因是我正在使用默认的 PowerShell ISE 开发脚本,但是当我在 Advanced Installer 中将其转换为自定义操作时,它会使用 SysWOW64 中的 powershell,但无法找到密钥。

Windows 在注册表中为 32 位和 64 位应用程序维护两个单独的部分。

有关详细信息,请参阅 32-bit and 64-bit Application Data in the Registry