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