Windows是否有内置功能可以让我以可复制/粘贴到电子表格的方式列出计算机上所有已安装的软件?我知道有可以执行此操作的软件,但是我什么也无法安装。如果可能的话,我宁愿不使用批处理文件,但我想那将是唯一的方法。理想情况下,我将能够输出与“添加/删除程序”表单的(未展开)视图中所示的信息相同的信息。
Get-WmiObject -Class Win32_Product
。有关更多详细信息,请参见此处。
Windows是否有内置功能可以让我以可复制/粘贴到电子表格的方式列出计算机上所有已安装的软件?我知道有可以执行此操作的软件,但是我什么也无法安装。如果可能的话,我宁愿不使用批处理文件,但我想那将是唯一的方法。理想情况下,我将能够输出与“添加/删除程序”表单的(未展开)视图中所示的信息相同的信息。
Get-WmiObject -Class Win32_Product
。有关更多详细信息,请参见此处。
Answers:
启动控制台并输入:
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
wmic
清单中未显示的一些项目:我安装的Steam游戏,Notepad ++,Winmerge,Google的音乐管理器。程序和功能中未显示的项目:Java自动更新程序,CAPICOM的安全更新(KB931906)。我尝试从Administrator CMD运行它,但是生成的清单是相同的。
运行wmic product get
以获取已安装软件的列表,该列表应与添加/删除程序完全相同。
您应该可以让它以特定格式输出,但是我还没有尝试过。
(wmic product get /?
用于查看包括输出格式在内的参数,我尝试在此处包含它,但格式不太正确。)
正如其他人提到的那样,您可以通过WMI查询Win32_Product对象获得此信息。如果愿意,PowerShell甚至会为您将其转储为CSV文件。
Get-WmiObject -Class "Win32_Product" | Export-CSV (Join-Path $home "Win32_Product.csv")
但是,您应该搜索Win32_Product问题。并不是所有的口香糖和棒棒糖。
Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table
除非您已在菜单中明确安装Management and Monitoring Tools
Add/Remove Windows Components
WMIC,否则WMIC将无法在服务器上运行。
另一种解决方案是转到注册表,并通过以下方法查看所有“可卸载程序”:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
您必须单独单击每个按钮才能看到该值,因此可以右键单击该Uninstall
文件夹并选择Export。确保将“ 导出范围”设置为仅包括“ 选定分支”:
然后,您可以.reg
在notepad ++中打开文件,但是您将在每个应用程序上获得很多额外的信息:
您可以通过匹配以下正则表达式来摆脱所有以不开头的 行:"DisplayName"
^(?!"DisplayName").+
然后,您可以删除字符串 "DisplayName"
或"
通过匹配以下正则表达式:
("DisplayName"="|")
^(.*)(\r?\n\1)+$
或者,您可以按字母顺序对行进行排序,然后删除空白行
我发现最简单的方法是运行piriform的ccleaner。
在工具->卸载->“保存到文本文件”中有一个按钮
wmic
并没有达到此目的)。
在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
通过注册表在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();
}
}
}