我想之前分享过如何使用WMI查询的方式获取安装的软件列表:- Get-WmiObject win32_product
复制代码 小弟以前只知道WMI查询慢,很慢,从来没有体会过它会慢到让人抓狂,近乎崩溃。一个同事在他的机器上运行后,运行了两个小时,仍然没有结束,也没有一行结果返回。
这使我不得不投入到注册表的怀抱了。要扫描注册表,PowerShell表示没有任何压力。但是唯一需要我们小心的就是这里可能会有三个路径:
1. HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
2. HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall
3. HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
第一个表示的是机器级别的软件。
第二个表示仅限当前用户安装的软件(ClickOne程序默认可以从这个路径下查询)。
第三个和第一个类似,只是只可能出现在64位操作系统上。
具体的调用函数可以参考:- <#
- .Synopsis
- Get installed software list by retrieving registry.
- .DESCRIPTION
- The function return a installed software list by retrieving registry from below path;
- 1.'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall'
- 2.'HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall'
- 3.'HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall'
- Author: Mosser Lee (http://www.pstips.net/author/mosser/)
-
- .EXAMPLE
- Get-InstalledSoftwares
- .EXAMPLE
- Get-InstalledSoftwares | Group-Object Publisher
- #>
- function Get-InstalledSoftwares
- {
- #
- # Read registry key as product entity.
- #
- function ConvertTo-ProductEntity
- {
- param([Microsoft.Win32.RegistryKey]$RegKey)
- $product = '' | select Name,Publisher,Version
- $product.Name = $_.GetValue("DisplayName")
- $product.Publisher = $_.GetValue("Publisher")
- $product.Version = $_.GetValue("DisplayVersion")
-
- if( -not [string]::IsNullOrEmpty($product.Name)){
- $product
- }
- }
-
- $UninstallPaths = @(,
- # For local machine.
- 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall',
- # For current user.
- 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall')
-
- # For 32bit softwares that were installed on 64bit operating system.
- if([Environment]::Is64BitOperatingSystem) {
- $UninstallPaths += 'HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall'
- }
- $UninstallPaths | foreach {
- Get-ChildItem $_ | foreach {
- ConvertTo-ProductEntity -RegKey $_
- }
- }
- }
复制代码 转自:PowerShell快速高效地获取安装的软件列表
http://www.pstips.net/get-installedsoftwares.html |