通过cmd或powershell获取已安装的程序

我试图让所有安装的应用程序在我的域的计算机中,但我还没有find一种方法来获取信息的准确方式首先我试图通过registry项来实现这一点:

HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* 

但是这返回了更多的信息比我需要更新安装。 所以我search了另一种方式,我发现wmi类Win32_product包含所有已安装的应用程序,但尝试这个y之后,发现reclay的信息是不正确的

在这里输入图像说明

¿为什么有一些应用程序,如谷歌浏览器,免费代理,戴尔系统诊断 ,查询类时不会出现?

 In this link is the answer for this question 

使用powershell获取完全相同的应用程序列表中的添加/删除程序

有一种方法可以通过PowerShell或命令行准确地获取所有安装的应用程序在Windows中?

WMI类Win32_Product使用MSI提供程序来收集已安装的程序数据。 这意味着您只能获取使用MSI安装的软件/软件包的数据。 此外,调用这个类将导致在每个返回的程序中执行修复操作。 大多数情况下,这不是一个问题,但它会填满事件日志,并可能导致一些软件的问题。 你可以在这个链接上得到更多的细节: Win32_Product Class

大多数脚本编写人员,编码人员等使用以下两种方法之一: 1)registry查询,2)SCCM类SMS_InstalledSoftware WMI查询。 显然,SCCM类需要在主机上安装SCCM。 你可以阅读更多关于这里 。 所以这真的只留下registry查询大多数folx。 不要担心,因为TSG已经为你完成了所有的工作。

你的黄金是“ 使用PowerShell快速查找安装的软件 ”

虽然我会做的事情比在这个职位稍有不同,它已经写了所有繁重的工作。 有一点天赋和一些谷歌search,你可以自定义,如你所愿。

我不确定是否故意忽略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

 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