Wyświetl listę wszystkich zainstalowanych programów na PC

30

Czy w systemie Windows jest coś wbudowanego, co pozwala mi wyświetlić listę wszystkich zainstalowanych programów na komputerze w sposób, który można skopiować / wkleić do arkusza kalkulacyjnego? Wiem, że istnieje oprogramowanie, które może to zrobić, ale nie mogę niczego zainstalować. Wolę nie używać pliku wsadowego, jeśli to możliwe, ale wyobrażam sobie, że to będzie jedyny sposób. Idealnie byłoby, gdybym mógł wyświetlić te same informacje, które są pokazane w (nierozwiniętym) widoku formularza Dodaj / Usuń programy.

Joel B.
źródło
Możliwe, że napiszesz plik wsadowy w celu przeszukania bazy danych Instalatora Windows, ale to nie wszystko.
Napisałem aplikację, która wysyła zapytanie do rejestru w celu uzyskania tych informacji, i chociaż aplikacja nie ustawia żądanego formatu, część kodu można skopiować i łatwo zmodyfikować, aby to zrobić, oto link do źródła: pulsarsoftware.org/Projects/ProcessManager.html
MaQleod
1
W Windows PowerShell, można spróbować: Get-WmiObject -Class Win32_Product. Zobacz tutaj po więcej szczegółów.
rishimaharaj,

Odpowiedzi:

40

Uruchom konsolę i wpisz:

wmic product get name,version

To zajmuje trochę czasu, ale otrzymasz pełną listę zainstalowanych programów. WMIC to konsolowa wersja Instrumentacji zarządzania Windows, dostępna od Windows 2000 i późniejszych. Postępując zgodnie z instrukcjami tu i tutaj , możesz powiedzieć WMIC, aby wyprowadzał dane w formacie XML, co może być dla ciebie nieco wygodniejsze. Jednak samo wywołanie wmic product get nameda ci listę nazw aplikacji, które możesz łatwo skopiować do edytora tekstowego i przekonwertować na format arkusza kalkulacyjnego.

Alternatywnie wprowadź:

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

Spowoduje to wygenerowanie pliku TXT z listą programów. Możesz następnie wkleić to do arkusza kalkulacyjnego, jeśli chcesz.

Źródło: http://helpdeskgeek.com/how-to/generate-a-list-of-installed-programs-in-windows/


Możesz także użyć pliku csv.xsl, aby sformatować dane wyjściowe w liście wyników CSV:

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

lub plik htable.xsl, aby utworzyć tabelę wyników HTML:

wmic /output:C:\InstallList.htm product get /format:hform.xsl
Yannis
źródło
2
Jeśli dodasz> InstallList.txt na końcu, otrzymasz plik tekstowy zawierający wynik. Bieżący katalog, w którym się znajdujesz, to miejsce, w którym plik zostanie utworzony. Możesz także dodać InstallDate po wersji. Spowoduje to wyświetlenie daty instalacji produktu. Jest to przydatne, aby uporządkować wszelkie zainstalowane programy produkcyjne. Powinieneś być w stanie otworzyć ten plik tekstowy w programie Excel i posortować trochę w razie potrzeby.
John Dyer
8
Niestety nie wydaje się, aby generowała tę samą listę, jak pokazano w Programach i funkcjach: istnieje kilka aplikacji, które nie pojawiają się w pierwszym i kilka, które nie istnieją w drugim. Niektóre elementy, które nie pojawiają się na wmicliście: moje zainstalowane gry Steam, Notepad ++, Winmerge, Menedżer muzyki Google . Elementy, które nie pojawiają się w programach i funkcjach : Java Auto Updater, aktualizacja zabezpieczeń dla CAPICOM (KB931906) . Próbowałem uruchomić go z CMD administratora, ale wygenerowany wykaz był taki sam.
Chuim,
1
To pytanie na StackOverflow trochę wyjaśnia, dlaczego: stackoverflow.com/questions/673233/…
Chuim
Użyłem podobnego polecenia, ale nie podało kilku nazw s / w. Przykład. Propros, brzęk itp. Jak to uwzględnić i tym podobne?
Satya Prakash
8

Uruchom, wmic product getaby uzyskać listę zainstalowanego oprogramowania, powinna być dokładnie taka sama jak lista dodawania / usuwania programów.

Podobno można go uzyskać w określonym formacie, ale nie próbowałem tego.

(Użyj, wmic product get /?aby zobaczyć parametry, w tym formatowanie wyjściowe, próbowałem go tutaj dołączyć, ale formatowanie nie było w porządku).

Mark Allen
źródło
Ha - i tak cię głosowałem, ponieważ znalazłeś i umieściłeś linki, aby dane wyjściowe były w formacie XML. Dobra robota. :)
Mark Allen,
Wynik, który otrzymuję, nie jest dokładnie tym , co listy Dodaj / Usuń programy. Jakieś pomysły dlaczego?
Joel B,
Wydaje się, że obejmuje wszystkie części składowe.
Mark Allen
Czy istnieje sposób na zainstalowanie oprogramowania przez dowolnego użytkownika? Prawdopodobnie problem związany z użytkownikiem powoduje, że nie wszystkie programy pojawiają się na liście. Chociaż używam tylko tego urządzenia.
Satya Prakash
5

Jak wspomnieli inni, możesz uzyskać te informacje za pomocą zapytania WMI dla obiektów Win32_Product. PowerShell zrzuci go nawet do pliku CSV, jeśli chcesz.

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

Powinieneś jednak poszukać problemów z Win32_Product . To nie wszystkie kropelki gumy i lizaki.

Patrick Seymour
źródło
Zawsze lubię alternatywne podejście do rzeczy, szczególnie gdy dotyczy Powershell.
Alban
Oto kolejne polecenie PowerShell, aby wykonać tę sztuczkę: Get-ItemProperty HKLM: \ Software \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Odinstaluj * | Wybierz obiekt DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize Możesz dodać „> plik wyjściowy”, aby zapisać dane wyjściowe. Zobacz więcej tutaj: howtogeek.com/165293/… lub tutaj: theitbros.com/…
yosh m
Uwaga dla każdego, kto próbuje polecenia @ yoshm, potrzebujesz innego \ pomiędzy Odinstaluj a *. Poleceniem powinno być:Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table
stephenwade
4

WMIC nie będzie działać na serwerze, chyba że zostanie to jawnie zainstalowane Management and Monitoring Toolsw Add/Remove Windows Componentsmenu .

Innym rozwiązaniem jest przejście do rejestru i sprawdzenie wszystkich programów, które można odinstalować , przechodząc do:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

Będziesz musiał kliknąć każdy z osobna, aby zobaczyć wartość, więc zamiast tego możesz kliknąć Uninstallfolder prawym przyciskiem myszy i wybrać Eksportuj . Upewnij się, że zakres eksportu jest ustawiony tak, aby obejmował tylko wybrany oddział :

Wybrany oddział

Następnie możesz otworzyć .regplik w Notatniku ++, ale uzyskasz wiele dodatkowych informacji na temat każdej aplikacji:

.reg

Możesz pozbyć się wszystkich linii, które się nie zaczynają "DisplayName" , dopasowując do następującego wyrażenia regularnego :

^(?!"DisplayName").+

Następnie możesz usunąć ciąg "DisplayName" lub "dopasowując następujące wyrażenie regularne :

("DisplayName"="|")

Następnie możesz usunąć wszelkie zduplikowane linie , dopasowując je do następującego wyrażenia regularnego :

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

Lub możesz po prostu posortować wiersze alfabetycznie, a następnie usunąć puste

KyleMit
źródło
3

Najłatwiej znalazłem sposób czyszczenia piriforma.
Ma przycisk w Narzędzia -> Odinstaluj -> „Zapisz w pliku tekstowym”

użytkownik167328
źródło
1
OP poprosił o wbudowane rozwiązanie, ponieważ nie może niczego zainstalować (ok, CCleaner jest przenośny, ale nie o to chodzi). Wyjście powinno obsługiwać kopiowanie i wklejanie
nixda
1
Rozumiem ograniczenia narzucone przez OP, ale ta metoda w rzeczywistości wygenerowała tak kompletną listę, jak pokazują Programy i Funkcje (jak mówią moje komentarze do głównej odpowiedzi, tego wmicnie osiągnąłem).
Chuim,
0

W systemie Windows 7 możesz użyć skryptu PowerShell:

Otwórz PowerShell, klikając Startprzycisk i wpisując powershellw polu wyszukiwania.

Następnie wprowadź następujące polecenie w oknie programu PowerShell:

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

Możesz usunąć dowolne z pól: DisplayName, DisplayVersion itp., Jeśli ich nie potrzebujesz.

Jeśli chcesz zapisać dane wyjściowe w pliku, użyj przekierowania:

Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize > C:\temp\AllInstalledPrograms.txt
Flot2011
źródło
0

Dwa inne rozwiązania, które nie zostały wcześniej wymienione w wierszu poleceń:

  1. MyUninstaller - darmowy program od NirSoft, który oprócz odinstalowywania, może również eksportować do HTML kompleksową listę wszystkich zainstalowanych programów, która zawiera wiele dodatkowych informacji. Ma tę zaletę, że jest przenośny. Chociaż nie jest on „wbudowany”, można go uruchomić z dysku USB. Możesz go znaleźć tutaj .

  2. Belarc Advisor - darmowy (do użytku osobistego) program, który dokonuje analizy bezpieczeństwa i kompleksowej inwentaryzacji sprzętu i oprogramowania komputera. Jest dostępny tutaj . Niestety musisz go zainstalować, aby nie w pełni odpowiadał potrzebom PO, ale może zaspokoić potrzeby innych osób, które mają to samo pytanie i są w stanie zainstalować.

yosh m
źródło
0

Zakodowana wersja w c # zainstalowanych programach za pośrednictwem rejestru

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


    }
}
Domenico Zinzi
źródło