使用 Powershell 的已安装程序的完整列表

Posted

技术标签:

【中文标题】使用 Powershell 的已安装程序的完整列表【英文标题】:Full Listing of Installed Programs using Powershell 【发布时间】:2019-04-09 05:01:19 【问题描述】:

我们使用at this link 找到的以下命令来尝试获取 Windows 中已安装程序的完整列表:

Get-WmiObject -Class Win32_Product 

但是,与“控制”面板中的已安装程序列表相比,这提供了不完整的已安装程序列表。

我们的初衷是有一个脚本可以交互并最终自动卸载安装在计算机上的英国媒体报道软件。但是,上面的命令遗漏了一些我们也想卸载的命令。

我们可以查看另一个Class 以获得完整列表吗?还是我们可以使用另一个命令? 任何见解表示赞赏

【问题讨论】:

如果您安装了 SCCM,您可以使用它添加的类。另一种方法是检查注册表中的安装/卸载项目。 ///// 顺便说一句,你可能会尽量避免Win32_Product - 它会对它知道的所有应用程序运行完整性检查......并且有时会默默地将它们重置为默认配置。哎哟! 【参考方案1】:

Get-Package cmdlet 比Win32_Product 类提供更多信息。以下是我的 Windows 10 系统上两者的区别:

PS C:\> Get-WmiObject -Class Win32_Product | Where-Object Name -Match TOSHIBA | Format-Table

IdentifyingNumber                      Name                        Vendor              Version      Caption
-----------------                      ----                        ------              -------      -------
1E6A96A1-2BAB-43EF-8087-30437593C66C TOSHIBA System Driver       Toshiba Corporation 2.00.0005    TOSHIBA System Driver
1515F5E3-29EA-4CD1-A981-032D88880F09 TOSHIBA Audio Enhancement   Toshiba Corporation 3.0.0.9      TOSHIBA Audio Enhancement
716C8275-A4A9-48CB-88C0-9829334CA3C5 Toshiba Quality Application TOSHIBA             1.0.9.7      Toshiba Quality Application
E4C7D9D7-19D4-4623-AF0C-EA313C466411 Toshiba TEMPRO              Toshiba Europe GmbH 5.0.0        Toshiba TEMPRO
72EFCFA8-3923-451D-AF52-7CE9D87BC2A1 TOSHIBA eco Utility         Toshiba Corporation 3.0.1.6403   TOSHIBA eco Utility
B040D5C9-C9AA-430A-A44E-696656012E61 TOSHIBA System Settings     Toshiba Corporation 3.0.3.6400   TOSHIBA System Settings
0B39C39A-3ECE-4582-9C91-842D22819A24 TOSHIBA Display Utility     Toshiba Corporation 2.0.1.0      TOSHIBA Display Utility
EDC626BA-3E59-44C4-96B4-9066E29BF600 TOSHIBA Service Station     Toshiba Corporation 3.1.0.2      TOSHIBA Service Station
26BB68BB-CF93-4A12-BC6D-A3B6F53AC8D9 TOSHIBA Password Utility    Toshiba Corporation 8.1.1.0      TOSHIBA Password Utility
B507386D-1F61-4E55-B05B-F56ACB0086B3 TOSHIBA PC Health Monitor   Toshiba Corporation 5.01.02.6400 TOSHIBA PC Health Monitor

这一项包括额外的条目。您应该能够看到它包含来自 Programs 提供程序以及 msi 提供程序的条目。

PS C:\> Get-Package *TOSHIBA*

Name                           Version          Source                           ProviderName
----                           -------          ------                           ------------
TOSHIBA System Driver          2.0.5            C:\Program Files (x86)\TOSHIB... msi
TOSHIBA Audio Enhancement      3.0.0.9          C:\Program Files\TOSHIBA\TOSH... msi
Toshiba Quality Application    1.0.9.7          C:\Program Files (x86)\Toshib... msi
Toshiba TEMPRO                 5.0.0            C:\Program Files (x86)\Toshib... msi
TOSHIBA eco Utility            3.0.1.6403       C:\Program Files\TOSHIBA\Teco\   msi
TOSHIBA System Settings        3.0.3.6400       C:\Program Files\TOSHIBA\Syst... msi
TOSHIBA Display Utility        2.0.1.0          C:\Program Files\Toshiba\TOSH... msi
TOSHIBA Service Station        3.1.0.2                                           msi
TOSHIBA Password Utility       8.1.1.0          C:\Program Files\Toshiba\Pass... msi
TOSHIBA Password Utility       8.1.1.0                                           Programs
TOSHIBA PC Health Monitor      5.1.2.6400       C:\Program Files\TOSHIBA\TPHM\   msi
TOSHIBA Manuals                10.20                                             Programs
TOSHIBA Recovery Media Creator 3.3.00.8003                                       Programs

Programs 提供程序中删除包实际上比听起来要难。那里的条目通常会有一个卸载命令或一个安静的卸载命令,但不能保证。对于有安静卸载字符串的情况,您可以执行以下操作:

function Uninstall-Program($Package) 

    $Command = foreach ($i in (0..($Package.Meta.Attributes.Keys.Count - 1))) 
        if ($Package.Meta.Attributes.Keys[$i] -eq 'QuietUninstallString') 
            $Package.Meta.Attributes.Values[$i]
          
    

    Invoke-Expression "& $Command"

然后你可以卸载:

$Package = Get-Package "botframework-emulator"
Uninstall-Program $Package

【讨论】:

太棒了!并且肯定回答了这个问题——但是,我们似乎不能使用该方法返回的对象来卸载有问题的程序。知道最后一点的方法吗? @rm-vanda 你能用Uninstall-Package -name packageName Uninstall-Package cmdlet 不适用于某些条目。我在程序控制面板中添加了一个用于处理条目的部分。

以上是关于使用 Powershell 的已安装程序的完整列表的主要内容,如果未能解决你的问题,请参考以下文章

获取可以发送通知的已安装 Windows 应用程序列表

可以卸载的已安装程序/更新列表

PowerShell 中数字后缀的完整列表是啥?

如何获取包含名称和版本对的已安装 Jenkins 插件列表

powershell 在-UPS-SharePoint中导出所有用户配置文件的已定义属性。

如何获取已安装的 OLE DB 提供程序的列表?