Fire up your console and type:

wmic product get name,version

It takes a while, but you'll get the full list of installed programs. WMIC is the console version of Windows Management Instrumentation, available from Windows 2000 and onwards. Following the instructions here and here, you can tell WMIC to output in an XML format, that might be a bit more convenient for you. However just calling wmic product get name will get you a list of application names, that you can easily copy paste to a text editor and convert to spreadsheet format.

Alternatively, enter:

wmic /output:C:\InstallList.txt product get name,version

This will output a TXT file with the list of programs. You can then paste that into a spreadsheet, if you want.

Source: http://helpdeskgeek.com/how-to/generate-a-list-of-installed-programs-in-windows/


Also you can use the csv.xsl file to format the output into a CSV list of results:

wmic /output:C:\InstallList.csv product get /format:csv.xsl

or the htable.xsl file to create an HTML table of results:

wmic /output:C:\InstallList.htm product get /format:hform.xsl
Answer from yannis on Stack Exchange
🌐
Spiceworks
community.spiceworks.com › software & applications
Using WMIC to Retrieve a List of All Installed Programs - Software & Applications - Spiceworks Community
March 6, 2015 - “The Windows Management Instrumentation Command-line (WMIC) is a command-line and scripting interface that simplifies the use of Windows Management Instrumentation (WMI) and systems managed through WMI.” This explains how to use WMIC to pull a list of all installed programs on a computer, so that you can review the list and determine if there are any unwanted programs installed.
Discussions

Show all programs using wmic command - Software & Applications - Spiceworks Community
What is the command to show all programs installed on computer? This is what I use wmic:root\cli> “/node:computername product get name, version” But unfortunately it doesn’t show all the programs installed on the pc, it only show some of the programs. Does anybody know the command to ... More on community.spiceworks.com
🌐 community.spiceworks.com
3
November 18, 2014
windows - WMI: Get the list of Installed Softwares - Stack Overflow
I need to get the list of installed softwares on remote Windows hosts using wmi calls. I have tried using Win32_Product and Win32Reg_AddRemovePrograms Classes. Advantage of using Win32_Product is ... More on stackoverflow.com
🌐 stackoverflow.com
Search WMIC for installed software - AutoIt General Help and Support - AutoIt Forums
Hi, I am trying to query WMIC on a remote computer to see if a particular program is installed (Microsoft .Net 4.6.1). There are plenty of ways to go about this but I think WMI would be the most reliable way. I'm having issues with the syntax. This works from a command prompt: wmic /node:COMPUTER... More on autoitscript.com
🌐 autoitscript.com
December 4, 2017
View installed software version via command line?

It depends on the author of the program to provide an interface to get the version of the program. If it's not available, there is no "common" way. It will likely need to be done on a per program basis.

More on reddit.com
🌐 r/commandline
5
2
March 14, 2019
Top answer
1 of 3
1

My output is empty / blank, see belwo.

The example is missing the trailing slash after Uninstall. I get different software lists when I look at the 32/64 bit entries.

Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | sort-object -property DisplayName | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize

Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | sort-object -property DisplayName | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize

For a combined view, run this.

function Analyze( f) {
    Get-ItemProperty $p |foreach {
       if (($_.DisplayName) -or ($_.version)) {
            [PSCustomObject]@{ 
                    From = $f;
                    Name = $_.DisplayName;
                    Version = $_.DisplayVersion;
                    Install = $_.InstallDate 
             }
       } 
    }
}

s += Analyze 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*' 64
$s += Analyze 'HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' 32
$s | Sort-Object -Property Name 

Instead of WMIC, try Get-CimInstance

Get-CimInstance Win32_Product | Sort-Object -property Name | Format-Table -Property Version, InstallDate, Name

One behavior I have noticed is that referencing Win32_Product generates an event for each product in the application event log. Check your log. You might be getting an error that is stopping the analysis.

Log Name: Application
Source: MsiInstaller
Date: 2/2/2021 10:06:39 AM
Event ID: 1035
Task Category: None
Level: Information
Keywords: Classic
User: SYSTEM
Computer: slick
Description:
Windows Installer reconfigured the product. Product Name: Microsoft SQL Server 2014 Management Objects. Product Version: 12.0.2000.8. Product Language: 1033. Manufacturer: Microsoft Corporation. Reconfiguration success or error status: 0.

2 of 3
0

Hi,

My output is empty / blank, see belwo.

🌐
Github
john77eipe.github.io › find-installed-programs-cmd.html
Getting list of programs installed from command line | john77eipe.github.io
Type product get name,version hit enter. wmic:root\cli>product get name,version · If you want to export the list to a text file wmic:root\cli>/output:c:\ProgramList.txt product get name,version
Top answer
1 of 3
4

The WMI class Win32_Product uses the MSI provider to collect installed program data. This means you're only going to get data on software/packages installed using MSI. Further, calling this class causes a repair action to be executed on every program it returns. Most of the time this isn't an issue, but it will fill up the event log and can cause issues for some software. You can get more detail on this link: Win32_Product Class

Most scripters, coders, etc use one of two things; 1) Registry Query, 2) WMI query of the SCCM class SMS_InstalledSoftware. Obviously the SCCM class requires SCCM to be installed on the host. You can read more about that HERE. So that really only leaves the registry query for most folx. Don't fret though, because all the work was already done for you by TSG.

Your pot of gold is "Use PowerShell to Quickly Find Installed Software"

While I'd do things slightly differently than in that post, it has all the heavy lifting already written. With a little aptitude and some google searching you can customize as you wish.

2 of 3
1

I'm not sure if you're intentionally ignoring 64-bit software, but keep in mind that the SOFTWARE\Wow6432Node is only supposed to be for 32 bit software running on a 64 bit machine. You also have HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\

If you want all software, you'll need to aggregate a few methods/sources. Those two keys should have most, if not all. You must also consider HKEY_USERS[each user]\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ and its Wow6432Node counterpart. Applications like DropBox, sometimes google chrome, and a few others are installed only in the user environment. I suspect this is also why the Win32_Product does not have those specific packages.

For filtering your aggregated list, there isn't a simple way. You could exclude those with the key System=1 or Publisher="Microsoft Corporation" (double check the key name; I may have remembered wrong). Those keys are used in some non-essential software too, though.

🌐
Spiceworks
community.spiceworks.com › software & applications
Show all programs using wmic command - Software & Applications - Spiceworks Community
November 18, 2014 - What is the command to show all programs installed on computer? This is what I use wmic:root\cli> “/node:computername product get name, version” But unfortunately it doesn’t show all the programs installed on the pc, it…
Find elsewhere
🌐
Overpoweredshell
overpoweredshell.com › SysAdmin-Basics-Getting-Installed-Software
SysAdmin Basics - Getting Installed Software
May 5, 2017 - Since it’s just interacting with WMI, you can use WMIC.exe to get installed software.
Top answer
1 of 3
17

You can use wmic.

Example:

wmic product get name,version /format:csv

wmic /node:localhost /output:d:\programlist.htm product
get name,version /format:htable.xsl

wmic product get name,version

wmic softwareelement get name,version

wmic softwarefeature get name,version

wmic wmic:root\cli>/output:c:\ProgramList.txt product get name,version

Or you can do it like the "Add/Remove Programs", reading all uninstall registry keys:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall

On 64 bit Windows, remember to also check:

HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\

To returns a list of all software installed on a computer, whether or not by Windows-Installer:

Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE 
strComputer = "." 
strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" 
strEntry1a = "DisplayName" 
strEntry1b = "QuietDisplayName" 
strEntry2 = "InstallDate" 
strEntry3 = "VersionMajor" 
strEntry4 = "VersionMinor" 
strEntry5 = "EstimatedSize" 

Set objReg = GetObject("winmgmts://" & strComputer & _ 
 "/root/default:StdRegProv") 
objReg.EnumKey HKLM, strKey, arrSubkeys 
WScript.Echo "Installed Applications" & VbCrLf 
For Each strSubkey In arrSubkeys 
  intRet1 = objReg.GetStringValue(HKLM, strKey & strSubkey, _ 
   strEntry1a, strValue1) 
  If intRet1 <> 0 Then 
    objReg.GetStringValue HKLM, strKey & strSubkey, _ 
     strEntry1b, strValue1 
  End If 
  If strValue1 <> "" Then 
    WScript.Echo VbCrLf & "Display Name: " & strValue1 
  End If 
  objReg.GetStringValue HKLM, strKey & strSubkey, _ 
   strEntry2, strValue2 
  If strValue2 <> "" Then 
    WScript.Echo "Install Date: " & strValue2 
  End If 
  objReg.GetDWORDValue HKLM, strKey & strSubkey, _ 
   strEntry3, intValue3 
  objReg.GetDWORDValue HKLM, strKey & strSubkey, _ 
   strEntry4, intValue4 
  If intValue3 <> "" Then 
     WScript.Echo "Version: " & intValue3 & "." & intValue4 
  End If 
  objReg.GetDWORDValue HKLM, strKey & strSubkey, _ 
   strEntry5, intValue5 
  If intValue5 <> "" Then 
    WScript.Echo "Estimated Size: " & Round(intValue5/1024, 3) & " megabytes" 
  End If 
Next 
2 of 3
1

The encoded version in c# that is based on the readings in the system registry windows.

using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;


namespace SoftwareInventory
{
    class Program
    {
        static void Main(string[] args)
        {
            //!!!!! Must be launched with a domain administrator user!!!!!
            Console.ForegroundColor = ConsoleColor.Green;
            StringBuilder sbOutFile = new StringBuilder();
            Console.WriteLine("DisplayName;IdentifyingNumber");
            sbOutFile.AppendLine("Machine;DisplayName;Version");

            //Retrieve machine name from the file :File_In/collectionMachines.txt
            //string[] lines = new string[] { "NameMachine" };
            string[] lines = File.ReadAllLines(@"File_In/collectionMachines.txt");
            foreach (var machine in lines)
            {
                //Retrieve the list of installed programs for each extrapolated machine name
                var registry_key = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
                using (Microsoft.Win32.RegistryKey key = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, machine).OpenSubKey(registry_key))
                {
                    foreach (string subkey_name in key.GetSubKeyNames())
                    {
                        using (RegistryKey subkey = key.OpenSubKey(subkey_name))
                        {
                            //Console.WriteLine(subkey.GetValue("DisplayName"));
                            //Console.WriteLine(subkey.GetValue("IdentifyingNumber"));
                            if (subkey.GetValue("DisplayName") != null)
                            {
                                Console.WriteLine(string.Format("{0};{1};{2}", machine, subkey.GetValue("DisplayName"), subkey.GetValue("Version")));
                                sbOutFile.AppendLine(string.Format("{0};{1};{2}", machine, subkey.GetValue("DisplayName"), subkey.GetValue("Version")));
                            }
                        }
                    }
                }
            }
            //CSV file creation
            var fileOutName = string.Format(@"File_Out\{0}_{1}.csv", "Software_Inventory", DateTime.Now.ToString("yyyy_MM_dd_HH_mmssfff"));
            using (var file = new System.IO.StreamWriter(fileOutName))
            {

                file.WriteLine(sbOutFile.ToString());
            }
            //Press enter to continue 
            Console.WriteLine("Press enter to continue !");
            Console.ReadLine();
        }


    }
}
🌐
Bentley Communities
bentleysystems.service-now.com › community
OpenPlant - How to get list of installed applications/programs on Windows Machine using Command Prompt. - Communities
OpenPlant - OpenPlant - Product(s): N/A Version(s): N/A Environment: N/A Area: Installation & Configuration Subarea: Installed
🌐
AutoIt
autoitscript.com › autoit v3 › autoit help and support › autoit general help and support
Search WMIC for installed software - AutoIt General Help and Support - AutoIt Forums
December 4, 2017 - Hi, I am trying to query WMIC on ... reliable way. I'm having issues with the syntax. This works from a command prompt: wmic /node:COMPUTER......
🌐
Action1
action1.com › home › blog › how to script to list installed software on multiple computers
Script to List Installed Software on Multiple Computers
December 5, 2024 - Step 3: Choose Script language and type this command to get a list of installed software: wmic product get name,version /format:csv > C:\Computername%.csv
🌐
Server Fault
serverfault.com › questions › 764163 › how-can-i-list-all-installed-applications-including-those-installed-in-per-user
windows - How can I list all installed applications including those installed in per-user context? - Server Fault
March 16, 2016 - I can run wmic product to get a list of all installed software. This command will list any software installed in the system context, or per-user context for the logged in user. However, this comm...
🌐
Reddit
reddit.com › r/commandline › view installed software version via command line?
r/commandline on Reddit: View installed software version via command line?
March 14, 2019 -

From a Windows command line, I've used 'wmic get product name' but that only shows the software installed a certain way that wmic can recognize.

I also found this with Powershell.

Get-ItemProperty HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table -AutoSize

That shows other software and ones that are missing from wmic.

Some software has a log or text file with the version number that Find from a cmd line can read.

My goal is to pull the currently installed software version, like what you see from Windows Programs and Features, but from a command line ultimately, even if it's cheating a bit and using Powershell.

Is there something besides Find that might work to read off the .exe that runs the software to determine exactly which version it is?

I'm looking for something with a script that I can automate. Nothing with a gui. For Windows machines. Nothing with SCCM or Munki. I'm looking for the exact version number too, not just that the software is present. Otherwise DIR on c:\programs would work to some extent there.

I'm hoping there's some other way to read installed software besides Find or Findstr. Wmic and that Powershell line seem to work well enough. Simplifying it a little more is good.

Even with wmic and that Powershell line, it's grabbing a list of all of the software first, and then slimming it down with piping if I want to do that. It takes more time to grab all the software first. For wmic or PS, if there was a way to just ask for the individual piece of software instead of everything, that would be nice too, assuming that that's faster.

🌐
Microsoft Learn
learn.microsoft.com › en-us › windows › win32 › wmisdk › wmic
WMI command-line (WMIC) utility - Win32 apps | Microsoft Learn
Shows data. LIST is the default verb. ... Assigns values to properties. Example: environment set name="temp", variablevalue="new" Global switches are used to set defaults for the WMIC environment.
🌐
Seven Forums
sevenforums.com › software › 390708-there-tool-collect-list-all-installed-programs.html
Is there a tool to collect a list of all installed programs? - Windows 7 Help Forums
February 1, 2016 - I was hoping to have some tool already available in Windows because to use what you suggested I will have to explain to the person how to download and install it first. Try this. Open an elevated command prompt. type wmic Now at the prompt type · /output:c:\users\username\softwarelist.txt product get name, version, installlocation Username being the profile name of the user.
🌐
Make Tech Easier
maketecheasier.com › home › windows › how to get a list of all software installed on a windows system
How to Get a List of All Software Installed on a Windows System - Make Tech Easier
January 31, 2022 - The first and easiest way to get a list of all the installed software on your system is by using the Command Prompt. To do that, press Win + R, type cmd, then press the Enter button. The above action will open the Command Prompt window.
🌐
Ken Cenerelli
kencenerelli.wordpress.com › 2017 › 11 › 25 › list-installed-programs-on-windows-10
List Installed Programs on Windows 10 | Ken Cenerelli
November 25, 2017 - Specify /output:C:\InstalledPrograms.txt product get name,version and press EnterNote: Depending on the number of programs installed, it may take a few seconds for the list to be created. Once the list is complete, you are returned to the wmic:root\cli prompt.
🌐
Alphr
alphr.com › home › get a list of all installed software on a windows pc or mac
Get a List of All Installed Software on a Windows PC or Mac
January 18, 2023 - Follow the steps below to see how it’s done: Type “cmd” in the search bar. Click “run as administrator”. Copy the following command: wmic /output:C:\Installed Software List.txt product get name,version