如何从 Windows 机器获取控制面板中显示的已安装应用程序?

How to get installed apps which is shown in the control panel from the windows machine?

提问人:arun prasadh 提问时间:10/26/2023 最后编辑:mklement0arun prasadh 更新时间:10/26/2023 访问量:49

问:

我在 Windows 机器上安装了一些应用程序。我需要在 Windows 窗体中显示新安装或最近卸载的应用程序。我能够通过使用 WMI 或注册表编辑查询来实现它。

我需要每 30 秒更新一次表单。因此,当我频繁使用此功能时,我的系统CPU使用率变得异常。它突然高高举起。我该如何减少它?使用的查询如下,仅供参考。

在具有注册表编辑的 PowerShell 中:

$uninstallKeys = Get-ChildItem 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall', 'HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall' -ErrorAction SilentlyContinue |
    Get-ItemProperty |
    Where-Object { $_.DisplayName -ne $null } |
    Select-Object DisplayName, DisplayVersion, InstallDate, InstallLocation, Publisher, UninstallString 

$uninstallKeys

在 WMI 中:

Get-WmiObject -Class Win32_Product | Select-Object Name

让我知道是否有任何方法可以降低 CPU 使用率。

Windows PowerShell WMI CPU-用法

评论

1赞 mklement0 10/26/2023
最好避免使用 WMI 类,因为它仅返回 Windows Installer 安装的应用程序,不进行查询优化 (,即使在筛选时,也必须枚举所有产品) ,并且 - 最重要的是 - 始终执行一致性检查并可能触发修复操作。有关背景信息和替代方法,请参阅这篇出色的博客文章Win32_Product
1赞 mklement0 10/26/2023
顺便说一句:CIM cmdlet(例如)取代了 PowerShell v3(2012 年 9 月发布)中的 WMI cmdlet(例如 )。因此,应避免使用 WMI cmdlet,尤其是因为 PowerShell (Core) v6+(所有未来的努力都将用于此)甚至不再具有它们。但请注意,WMI 仍然是 CIM cmdlet 的基础。有关详细信息,请参阅此答案Get-CimInstanceGet-WmiObject
0赞 mklement0 10/26/2023
换句话说:如果使用触发了延长的 CPU 峰值,我不会感到惊讶。对于基于注册管理机构的方法,预计会出现一个相对短暂的方法。Win32_Product
0赞 arun prasadh 10/26/2023
嘿@mklement0,当我也使用注册表编辑时,CPU 使用率很高。此函数的重复命中过程是否会导致此问题?
1赞 arun prasadh 10/30/2023
get-package我试图使用它,但没有给出预期的结果。因此,我使用了注册表编辑方法本身,并延迟了循环,从而降低了 CPU 使用率。这对我有好处。感谢您提供上述信息。

答:

1赞 js2010 10/26/2023 #1

get-package 将列出 PowerShell 5.1 中的所有内容:

get-package