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

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

我正在尝试获取我所在域的计算机中安装的所有应用程序,但我还没有找到以准确的方式获取信息的方法,首先我尝试通过注册表项来实现这一点:

  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

相关内容