get-itemproperty 报告项目不存在,当它存在时

Posted

技术标签:

【中文标题】get-itemproperty 报告项目不存在,当它存在时【英文标题】:get-itemproperty reporting item doesn't exist, when it does 【发布时间】:2013-09-13 14:10:40 【问题描述】:

我在获取REG_SZ 值时遇到了一些奇怪的问题:

(get-itemproperty -Path "Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\VLC media player" -Name UninstallString).UninstallString

(get-itemproperty -Path "Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\VLC media player" -Name UninstallString).UninstallString

get-itemproperty : Cannot find path 'HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\VLC media player' because it
does not exist.
At line:1 char:2
+ (get-itemproperty -Path "Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (HKEY_LOCAL_MACH...LC media player:String) [Get-ItemProperty], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemPropertyCommand

此方法适用于另一个REG_SZ 没有问题,但是当我调用Uninstall 下面的许多键时它失败了。

具体来说,它适用于:

(get-itemproperty -Path "Registry::HKEY_CURRENT_USER\Software\Microsoft\Command Processor" -Name autorun).AutoRun

这两个数据条目都存在于我的系统中,在 regedit 中可见....

然而,非常有趣的是,它们不存在于结果中:

Get-ChildItem "Registry::HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\uninstall\"

还有几个“缺失”的键。这似乎是我不熟悉的一些奇怪的注册表命名空间虚拟化(类似于 HKEY_CLASSES_ROOT)?

【问题讨论】:

【参考方案1】:

A forum thread lead me to the answer.

它讨论了the virtualization of the registry for 32-bit and 64-bit programs。

在这种情况下,由于键“丢失”,因此必须检查其他路径(请注意,在尝试任何“错误”操作之前,我应该在条件中检查带有 test-path 的路径)。

PS > (dir HKLM:\SOFTWARE\wow6432node\Microsoft\Windows\CurrentVersion\Uninstall | measure).count
134
PS > (dir hklm:\software\microsoft\windows\currentversion\uninstall | measure).count
134

所以,我必须运行 32 位 powershell.exe。

PS > [Environment]::Is64BitProcess
False 

另外,HKEY_CLASSES_ROOT\Installer\Products 是另一个列出随 Windows Installer 安装的程序的位置。

This answer is helpful in regards to 32-bit vs. 64-bit powershell.exe.

The solution to this problem is robust。我有modified the previously linked function a bit 以使其更易于访问。

附:我在 macbook pro 上的 bootcamp 上运行 Windows 7。奇怪的是,不管我执行的 powershell.exe 是什么,它都是 32 位的。无论该位置是否位于wow6432node 下方,我都无法看到注册表项。

【讨论】:

以上是关于get-itemproperty 报告项目不存在,当它存在时的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2013 发布失败并报告“不存在”错误

2016012036+小学四则运算练习软件项目报告

tomcat打开localhost:8080/xx嗯时候报告404错误,但是我不知道错在哪里,求指

项目选题报告(团队)

错误“html”报告器不存在。检查报告器参数是不是有错误

Rust 2017 调查报告:学习曲线是最大痛点(最大的问题是这门语言太偏底层了,现在做底层的少了。还有C这个绕不过去的存在)