Is there anything built in to Windows that would allow me to list all of the installed software on a computer in a fashion that can be copy/pasted to a spreadsheet? I know there is software that can do this, but I can't install anything. I'd prefer not to use a batch file if possible, but I imagine that is going to be the only way. Ideally, I would be able to output the same information as is shown on the (un-expanded) view of the Add/Remove Programs Form.

  • You could possibly write a batch file to query the Windows Installer database, but that might not catch everything. – user3463 Jul 10 '12 at 19:48
  • I wrote an app that queries the registry for this information, and while the app doesn't put it to the format you want, the portion of the code can be copied and easily modified to do that, here is the link to the source: pulsarsoftware.org/Projects/ProcessManager.html – MaQleod Jul 10 '12 at 19:57
  • 1
    In windows powershell, you can try: Get-WmiObject -Class Win32_Product. See here for more details. – rishimaharaj Jul 10 '12 at 20:01

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
  • 2
    If you add >InstallList.txt to the end you will get a text file containing the output. The current directory where you are at is where the file will be created. Also you can add ,InstallDate after the version. This will show the date the product was installed. This is handy to sort out any manufacture installed programs. You should be able to open this text file in Excel and sort things a bit if needed. – John Dyer Nov 24 '12 at 21:15
  • 9
    Sadly it doesn't seem to generate the same list as shown in Programs and Features: there are several applications that don't show up in the former and a few that do but don't exist in the latter. Some items that don't show up in wmic listing: my installed Steam games, Notepad++, Winmerge, Google's Music Manager. Items that don't show up in Programs and Features: Java Auto Updater, Security Update for CAPICOM (KB931906). I tried running it from an Administrator CMD but the generated listing was the same. – Chuim Jul 11 '13 at 19:10
  • 1
    This question at StackOverflow kinda explains why: stackoverflow.com/questions/673233/… – Chuim Jul 11 '13 at 19:13
  • I used similar command but that has not given few s/w name. Example. Propros, clink, etc. How to include that and similar? – Satya Prakash Jan 21 '14 at 12:38
  • 1

Run wmic product get to get a list of installed software, it should be exactly the same list as add/remove programs.

You can supposedly get it to to output in a specific format, but I haven't tried it.

(Use wmic product get /? to see the parameters including the output formatting, I tried to include it here but the formatting wasn't quite right.)

  • Ha - I upvoted you anyway because you found and included the links to make it output in XML specifically. Good job. :) – Mark Allen Jul 10 '12 at 20:05
  • The output I'm getting isn't exactly what Add/Remove Programs lists. Any ideas why? – Joel B Jul 25 '12 at 20:49
  • It seems to include all the component parts. – Mark Allen Jul 26 '12 at 19:54
  • Is there a way to get software installed by any users. Possibly user related problem is causing not all software coming in list. Though I only use this machine. – Satya Prakash Jan 21 '14 at 12:39

As others have mentioned, you can get this info with a WMI query for Win32_Product objects. PowerShell will even dump it to a CSV file for you if you'd like.

Get-WmiObject -Class "Win32_Product" | Export-CSV (Join-Path $home "Win32_Product.csv")

However, you should search for Win32_Product issues. It's not all gumdrops and lollipops.

  • I always enjoy an alternative approach to things, especially when it involves Powershell. – Alban Jul 18 '13 at 19:46
  • Here's another PowerShell command to do the trick: Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize You can add "> outputfile" to save the output. See more here: howtogeek.com/165293/… or here: theitbros.com/… – yosh m Mar 5 '17 at 16:07
  • Note for anyone else trying @yoshm's command, you need another \ between Uninstall and *. The command should be: Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table – stephenwade Jun 26 '19 at 21:13

WMIC won't work on a Server unless you have explicitly installed Management and Monitoring Tools in the Add/Remove Windows Components menu.

Another solution is to go to the Registry and look at all the Uninstallable Programs by going to:


You'll have to click each one individually to see the value, so instead, you can right click on the Uninstall folder and select Export. Make sure that the Export Range is set to include only the Selected Branch:

Selected Branch

Then you can open up the .reg file in notepad++, but you're going to get a lot of extra information on each application:


You can get rid of all lines that don't start with "DisplayName" by matching against the following regex:


Then you can remove either string "DisplayName" or " by matching on the following regex:


Then you can remove any duplicates lines by matching on the following regex:


Or you can just sort lines alphabetically and then delete the blank ones


The easiest way I found is running piriform's ccleaner.
This has a button at Tools -> Uninstall -> "save to text file"

  • 1
    The OP asked for a built-in solution since he can't install anything (ok, there is CCleaner portable, but thats not the point). And the output should support copy&paste – nixda Jul 11 '13 at 11:04
  • 1
    I understand the limitation imposed by the OP, but this method did in fact generate an as complete list as shown by Programs and Features (as my comments on the main answer say, wmic didn't achieve that). – Chuim Jul 11 '13 at 19:30

On Windows 7 you can use a PowerShell script:

Open PowerShell by clicking Start button and typing powershell into the search field.

Then enter the following command in the PowerShell Window:

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

You can remove any of the fields: DisplayName, DisplayVersion, etc. if you don't need them.

If you want to save output to a file, use redirection:

Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize > C:\temp\AllInstalledPrograms.txt

Two other non-command-line solutions not previously mentioned are:

  1. MyUninstaller - a freeware program from NirSoft that, besides uninstalling, can also export to HTML a comprehensive list of all installed software that includes a lot of additional info. It has the advantage of being portable. While it is not "built-in", you can run it from a USB drive. You can find it here.

  2. Belarc Advisor - a freeware (for personal use) program that does security analysis and comprehensive inventory of your computer's hardware and software. It is available here. Unfortunately, you must install it, so it does not fully meet the OP's needs, but may meet the needs of others who have the same question and are able to install.


The encoded version in c# installed programs via registry

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();

            //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))
                            if (subkey.GetValue("DisplayName") != null && subkey.GetValue("DisplayName").ToString().Contains("Visual Studio"))
                                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))

            //Press enter to continue 
            Console.WriteLine("Press enter to continue !");


Not the answer you're looking for? Browse other questions tagged or ask your own question.