列出PC上所有已安装的软件


30

Windows是否有内置功能可以让我以可复制/粘贴到电子表格的方式列出计算机上所有已安装的软件?我知道有可以执行此操作的软件,但是我什么也无法安装。如果可能的话,我宁愿不使用批处理文件,但我想那将是唯一的方法。理想情况下,我将能够输出与“添加/删除程序”表单的(未展开)视图中所示的信息相同的信息。


您可以编写一个批处理文件来查询Windows Installer数据库,但这可能无法捕获所有内容。

我编写了一个应用程序,用于查询注册表以获取此信息,尽管该应用程序未将其设置为所需的格式,但是可以复制一部分代码并轻松对其进行修改,这是源代码的链接:pulsarsoftware.org/Projects/ProcessManager.html
MaQleod

1
在Windows PowerShell中,你可以试试:Get-WmiObject -Class Win32_Product。有关更多详细信息,请参见此处
rishimaharaj 2012年

Answers:


40

启动控制台并输入:

wmic product get name,version

需要一些时间,但是您将获得已安装程序的完整列表。WMIC是Windows Management Instrumentation的控制台版本,可从Windows 2000及更高版本获得。按照此处此处的说明进行操作,您可以告诉WMIC以XML格式输出,这可能对您来说更加方便。但是,仅通过调用即可wmic product get name获得应用程序名称列表,您可以轻松地将粘贴复制到文本编辑器中并转换为电子表格格式。

或者,输入:

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

这将输出带有程序列表的TXT文件。然后,您可以根据需要将其粘贴到电子表格中。

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


您也可以使用csv.xsl文件将输出格式化为结果的CSV列表:

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

或htable.xsl文件创建HTML结果表:

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

2
如果在末尾添加> InstallList.txt,您将获得一个包含输出的文本文件。您所在的当前目录是将在其中创建文件的位置。您也可以在版本之后添加,InstallDate。这将显示产品的安装日期。这对于整理任何制造商安装的程序很方便。您应该能够在Excel中打开此文本文件,并在需要时进行一些排序。
约翰·代尔

8
遗憾的是,它似乎没有生成与“程序和功能”中显示的列表相同的列表:前者中没有出现几个应用程序,而后者中有一些应用程序却不存在。wmic清单中未显示的一些项目:我安装的Steam游戏,Notepad ++,Winmerge,Google的音乐管理器。程序和功能中未显示的项目:Java自动更新程序,CAPICOM的安全更新(KB931906)。我尝试从Administrator CMD运行它,但是生成的清单是相同的。
Chuim 2013年

1
在StackOverflow上这个问题还挺解释了原因:stackoverflow.com/questions/673233/...
Chuim

我使用了类似的命令,但是并没有给出几个软件名称。例。Propros,clink等。如何包含这些内容和类似内容?
萨蒂亚·普拉卡什


8

运行wmic product get以获取已安装软件的列表,该列表应与添加/删除程序完全相同

您应该可以让它以特定格式输出,但是我还没有尝试过。

wmic product get /?用于查看包括输出格式在内的参数,我尝试在此处包含它,但格式不太正确。)


Ha-无论如何,我都赞成您,因为您找到并包含了使其专门以XML输出的链接。做得好。:)
Mark Allen

我得到的输出是不准确什么添加/删除程序列表。有什么想法吗?
Joel B

它似乎包括所有组成部分。
马克·艾伦

有没有办法让任何用户安装软件。可能与用户相关的问题导致并非所有软件都在列表中。虽然我只用这台机器。
萨蒂亚·普拉卡什

5

正如其他人提到的那样,您可以通过WMI查询Win32_Product对象获得此信息。如果愿意,PowerShell甚至会为您将其转储为CSV文件。

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

但是,您应该搜索Win32_Product问题。并不是所有的口香糖和棒棒糖。


我总是喜欢其他方法,尤其是在涉及Powershell时。
奥尔本

这是完成此操作的另一个PowerShell命令:Get-ItemProperty HKLM:\ Software \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall * | 选择对象DisplayName,DisplayVersion,发布者,InstallDate | Format-Table –AutoSize 您可以添加“> outputfile”来保存输出。查看更多在这里:howtogeek.com/165293/...或位置:theitbros.com/...
yosh米

请注意,对于任何其他尝试@yoshm命令的人,在卸载和*之间需要另一个\。命令应该是:Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table
stephenwade

4

除非您已菜单中明确安装Management and Monitoring ToolsAdd/Remove Windows Components WMIC,否则WMIC将无法在服务器上运行。

另一种解决方案是转到注册表,并通过以下方法查看所有“可卸载程序”

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

您必须单独单击每个按钮才能看到该值,因此可以右键单击该Uninstall文件夹并选择Export。确保将“ 导出范围”设置为仅包括“ 选定分支”

选定的分支

然后,您可以.reg在notepad ++中打开文件,但是您将在每个应用程序上获得很多额外的信息:

.reg

您可以通过匹配以下正则表达式来摆脱所有以不开头的 行:"DisplayName"

^(?!"DisplayName").+

然后,您可以删除字符串 "DisplayName""通过匹配以下正则表达式

("DisplayName"="|")

然后,您可以通过匹配以下正则表达式来删除所有重复行

^(.*)(\r?\n\1)+$

或者,您可以按字母顺序对行进行排序,然后删除空白行


3

我发现最简单的方法是运行piriform的ccleaner。
在工具->卸载->“保存到文本文件”中有一个按钮


1
OP要求内置的解决方案,因为他无法安装任何东西(好吧,这是CCleaner可移植的,但那不是重点)。输出应支持复制和粘贴
nixda

1
我了解OP施加的限制,但实际上该方法确实生成了一个完整列表,如程序和功能所示(正如我对主要答案的评论说,wmic并没有达到此目的)。
Chuim 2013年

0

在Windows 7上,您可以使用PowerShell脚本:

通过单击Start按钮并powershell在搜索字段中键入来打开PowerShell 。

然后在PowerShell窗口中输入以下命令:

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

您可以删除任何字段:DisplayName,DisplayVersion等(如果不需要)。

如果要将输出保存到文件,请使用重定向:

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

0

前面未提到的其他两个非命令行解决方案是:

  1. MyUninstaller-NirSoft提供的免费软件,除卸载外,还可以将所有已安装软件的完整列表导出到HTML,其中包括许多其他信息。它具有便携式的优点。它不是“内置”的,您可以从USB驱动器运行它。你可以在这里找到它。

  2. Belarc Advisor-一个免费软件(供个人使用)程序,可以对计算机的硬件和软件进行安全性分析和全面清点。在这里可用。不幸的是,您必须安装它,因此它不能完全满足OP的需求,但可以满足具有相同问题并能够安装的其他人的需求。


0

通过注册表在C#安装的程序中的编码版本

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 && 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))
            {

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


    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.