所以我正在写一个Powershell脚本,如果它还没有安装的话应该是7zip。 在写作的时候,我的计算机上还没有7zip,所以我用这行代码测试了Opera网页浏览器的代码(我显然有):
if((Get-ItemProperty HKLM:\ Software \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall * | where {$ _。displayName -match" opera"})-eq $ null)
这产生了很好的结果。但是在我最终安装了7zip并使用了相同的代码(替换了" opera"与" 7zip")后我什么也没得到 - 这意味着Get-ItemProperty没有&# 39; t列出7zip(即使在控制面板"添加/删除程序"你可以在程序列表中看到7zip)
如何检查以其他方式安装7zip的任何想法?
答案 0 :(得分:3)
这可能有所帮助:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | ?{$_.DisplayName -like "7-Zip*"}
答案 1 :(得分:3)
Micky建议你需要将你的查询与目标的查询相匹配。您正在寻找 7-Zip 而非 7zip 。如果您在注册表中检查了相同的位置,那么当您安装它时,您将看到密钥名称
值得一提的是我安装了64位版本。如果我安装了32位版本,那么逻辑将无法检测到它。您还应该做的是以多种方式之一检查系统架构。
test-path HKLM:\Software\wow6432node\Microsoft\Windows\CurrentVersion\Uninstall
如果机器是64位,则返回true。 WMI也会这样做。绝对不是最好或唯一的方式。只是想确保你知道它存在。还要注意Keith Hills的答案,因为它是一种更优雅的方式来处理这个问题。
答案 2 :(得分:1)
您可以使用WMI,例如:
,而不是在注册表中查找$prod = Get-WmiObject Win32_Product | Where {Name -match '7(-)?zip'}
if (!$prod) {
# install 7zip
}