我想之前分享过如何使用WMI查询的方式获取安装的软件列表:
1
|
Get-WmiObject
win32_product
|
小弟以前只知道WMI查询慢,很慢,从来没有体会过它会慢到让人抓狂,近乎崩溃。一个同事在他的机器上运行后,运行了两个小时,仍然没有结束,也没有一行结果返回。
这使我不得不投入到注册表的怀抱了。要扫描注册表,PowerShell表示没有任何压力。但是唯一需要我们小心的就是这里可能会有三个路径:
- ‘HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall’
- ‘HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall’
- ‘HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall’
第一个表示的是机器级别的软件。
第二个表示仅限当前用户安装的软件(ClickOne程序默认可以从这个路径下查询)。
第三个和第一个类似,只是只可能出现在64位操作系统上。
具体的调用函数可以参考:
也可以直接在控制台调用:
1
2
|
Invoke-Expression
(
new-object
System.Net.WebClient).DownloadString(
'https://raw.githubusercontent.com/mosserlee/PSTips/master/Functions/Get-InstalledSoftwares.ps1'
)
Get-InstalledSoftwares
|