Table of Contents
Windows - Get list of all applications
WMIC can't show all the programs using wmic (or anything else that makes WMI calls), unless all the programs on the machine are Windows Installer (MSI) packages, which would be rare. The Uninstall key in the registry is the only place that shows everything. It's what the Programs and Features list in Control Panel uses to populate the list of all programs.
There's a value in each registry entry under Uninstall labeled UninstallString. That contains the command you run to remove the program from the computer. Most of them will start with msiexec.exe /x, which are the ones returned by wmic. A program like WinRAR, for example, has its own uninstaller, and the command in the registry is C:\Program Files\WinRAR\uninstall.exe. Those will never be returned by wmic because they're considered non-standard, as far as WMI is concerned. Moreover, some of those non-standard ones may not support silent install/uninstall operations; it depends on how they were programmed/packaged.
To get them all, it's going to be a bit more complicated than just running wmic. You'd need several lines of Windows batch commands or Powershell expressions to grab all the UninstallString values and execute them.
Using WMIC
As administrator:
WMIC PRODUCT LIST BRIEF
result:
or
WMIC PRODUCT LIST FULL
result:
Using Registry
The venerable “Uninstall” key in the registry is the be-all/end-all of installed software.
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" /s | findstr /B ".*DisplayName" reg query "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" /s | findstr /B ".*DisplayName"
result:
NOTE: Wow6432Node for capturing 32-bit programs
Using Powershell
gp HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |Select DisplayName, DisplayVersion, Publisher, InstallDate, HelpLink, UninstallString |ogv
result:
Using Powershell Script
- apps.ps
# # Generates a full list of installed programs. # # Temporary file. $tmpFile = "tmp.txt" # File that will hold the programs list. $fileName = "programs-installed.txt" # Columns separator. $separator = "," # Delete previous files. Remove-Item $tmpFile Remove-Item $fileName # Creates the temporary file. Create-Item $tmpFile # Search register for programs - part 1. $loc = Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall $names = $loc |foreach-object {Get-ItemProperty $_.PsPath} foreach ($name in $names) { IF(-Not [string]::IsNullOrEmpty($name.DisplayName)) { $line = $name.DisplayName+$separator+$name.DisplayVersion+$separator+$name.InstallDate Write-Host $line Add-Content $tmpFile "$line`n" } } # Search register for programs - part 2. $loc = Get-ChildItem HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall $names = $loc |foreach-object {Get-ItemProperty $_.PsPath} foreach ($name in $names) { IF(-Not [string]::IsNullOrEmpty($name.DisplayName)) { $line = $name.DisplayName+$separator+$name.DisplayVersion+$separator+$name.InstallDate Write-Host $line Add-Content $tmpFile "$line`n" } } # Sorts the result, removes duplicate lines and # generates the final file. gc $tmpFile | sort | get-unique > $filename