我正在尝试获取我所在域的计算机中安装的所有应用程序,但我还没有找到以准确的方式获取信息的方法,首先我尝试通过注册表项来实现这一点:
HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*
但这返回了比我需要的更多的信息,例如已安装的更新。所以我搜索了另一种方法,我发现 wmi 类Win32_product
包含所有已安装的应用程序,但在尝试之后,我发现所记录的信息是不正确的
为什么有些应用程序像谷歌浏览器、免费代理、戴尔系统诊断程序,查询班级时没有出现?
In this link is the answer for this question
使用 powershell 获取与添加/删除程序完全相同的应用程序列表
有没有办法通过 powershell 或命令行准确获取 windows 中所有已安装的应用程序?
答案1
WMI 类Win32_Product
使用 MSI 提供程序来收集已安装程序的数据。这意味着您只会获取使用 MSI 安装的软件/软件包的数据。此外,调用此类会导致对其返回的每个程序执行修复操作。大多数情况下这不是问题,但它会填满事件日志并可能导致某些软件出现问题。您可以通过此链接获取更多详细信息:Win32_Product 类
大多数脚本编写者、程序员等使用以下两种方法之一:1) 注册表查询,2) SCCM 类的 WMI 查询SMS_InstalledSoftware
。显然,SCCM 类要求在主机上安装 SCCM。您可以阅读更多相关信息这里。因此,对于大多数人来说,实际上只需进行注册表查询。不过,不要担心,因为 TSG 已经为您完成了所有工作。
你的金罐是“使用 PowerShell 快速查找已安装的软件“
虽然我的做法与那篇文章略有不同,但所有繁重的工作都已写好。只要有一点天赋,再用谷歌搜索一下,你就可以按照自己的意愿进行定制。
答案2
我不确定您是否有意忽略 64 位软件,但请记住,SOFTWARE\Wow6432Node 仅适用于在 64 位机器上运行的 32 位软件。您还有 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\
如果你想全部软件,您需要聚合一些方法/来源。这两个键应该包含大多数(如果不是全部的话)。您还必须考虑 HKEY_USERS[每个用户]\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ 及其 Wow6432Node 对应项。DropBox、有时是谷歌浏览器和其他一些应用程序仅安装在用户环境中。我怀疑这也是 Win32_Product 没有这些特定软件包的原因。
要过滤您的汇总列表,没有简单的方法。您可以排除那些带有键 System=1 或 Publisher="Microsoft Corporation" 的列表(仔细检查键名;我可能记错了)。不过,这些键也用于一些非必要的软件。
答案3
Wmic
可能对此有用的工具。例如:wmic product get Name, Version
。
C:\Windows\System32>wmic product get Name, Version
Name Version
Windows 7 USB/DVD Download Tool 1.0.30
Microsoft Office OneNote MUI (English) 2010 14.0.70
...
Oracle VM VirtualBox 5.0.10 5.0.10
请注意,此命令可能无法列出某些已安装的程序。对我来说,Windows 7
它看不到已Opera
安装的程序。
还有许多用于格式化输出的选项:http://www.pearsonitcertification.com/articles/article.aspx?p=1700427&seqNum=4