This uses Microsoft.Win32.RegistryKey to check the SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall registry key on remote computers.

https://github.com/gangstanthony/PowerShell/blob/master/Get-InstalledApps.ps1

*edit: pasting code for reference

function Get-InstalledApps {
    param (
        [Parameter(ValueFromPipeline=$true)]
        [string[]]$ComputerName = $env:COMPUTERNAME,
        [string]$NameRegex = ''
    )
    
    foreach ($comp in $ComputerName) {
        $keys = '','\Wow6432Node'
        foreach (keys) {
            try {
                $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $comp)
                $apps = $reg.OpenSubKey("SOFTWARE$key\Microsoft\Windows\CurrentVersion\Uninstall").GetSubKeyNames()
            } catch {
                continue
            }

            foreach (apps) {
                $program = $reg.OpenSubKey("SOFTWARE$key\Microsoft\Windows\CurrentVersion\Uninstall\$app")
                $name = $program.GetValue('DisplayName')
                if ($name -and $name -match $NameRegex) {
                    [pscustomobject]@{
                        ComputerName = $comp
                        DisplayName = $name
                        DisplayVersion = $program.GetValue('DisplayVersion')
                        Publisher = $program.GetValue('Publisher')
                        InstallDate = $program.GetValue('InstallDate')
                        UninstallString = $program.GetValue('UninstallString')
                        Bits = key -eq '\Wow6432Node') {'64'} else {'32'})
                        Path = $program.name
                    }
                }
            }
        }
    }
}
Answer from Anthony Stringer on Stack Overflow
🌐
Action1
action1.com › home › blog › how to use wmic to install software remotely
How to Use WMIC Remotely to Install Software on Windows
September 19, 2025 - You can use wbemtest.exe as a GUI utility for working with WMI. To work with WMI from the console created wmic.exe. We will use WMIC remotely with domain administrator credentials to scan the list of nodes (PCs / laptops) and install software ...
🌐
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, ...
Discussions

How to get a list of software installed on remote computers
Hi, I am trying to get a list of software installed on remote computers in the office. I have been recommended to use the following code:Get-CimInstance Win32_Product -ComputerName $Computer but this just gives me back the software on my own computer.… More on learn.microsoft.com
🌐 learn.microsoft.com
1
0
Install software remotely using wmic - IT & Tech Careers - Spiceworks Community
WMIC (Windows Management Instrumentation Command-Line) is a potent tool that often doesn’t see much use due to the lack of (easily accessible) documentation available. More information can be found on WMIC here: WMIC - Take Command-line Control over WMI | Microsoft Learn. More on community.spiceworks.com
🌐 community.spiceworks.com
17
December 28, 2018
powershell - Getting Program Installed List of Remote Computers - Stack Overflow
I am trying to find a way to get the GUID of every program installed on about 150 computers. I was thinking I could create a login script that would run a script and save the result to a share fold... More on stackoverflow.com
🌐 stackoverflow.com
Get the List of installed softwares on remote computers with PowerShell
I've found that some environments lock down remote registry, but if they have the sccm client pushed out to machines, you can use the win32reg_addremoveprogams wmi class instead of the more clunky win32_product. More on reddit.com
🌐 r/PowerShell
12
149
February 16, 2018
People also ask

How to list installed programs from the Windows command line?
To list installed programs from the command line, you need to usewmictool by running the following command: wmic product get name,version
🌐
theitbros.com
theitbros.com › windows › miscellaneous › windows 10 › how to get list of installed programs in windows 10/11? – theitbros
How to Get List of Installed Programs in Windows 10/11? – TheITBros
How to list installed programs on Windows with PowerShell?
To list installed programs on Windows with PowerShell, you should use Get-Package cmdlet.
🌐
theitbros.com
theitbros.com › windows › miscellaneous › windows 10 › how to get list of installed programs in windows 10/11? – theitbros
How to Get List of Installed Programs in Windows 10/11? – TheITBros
How to view the list of installed programs in Settings App?
To see a full list of installed programs, you can use the Settings panel available in Windows 10/11. You need to pressWIN+Xor right-click onStartand clickInstalled Apps(Windows 11) orApps and Features(Windows 10). You can also run the quick access URI commandms-settings:appsfeatures.
🌐
theitbros.com
theitbros.com › windows › miscellaneous › windows 10 › how to get list of installed programs in windows 10/11? – theitbros
How to Get List of Installed Programs in Windows 10/11? – TheITBros
Top answer
1 of 3
3

This uses Microsoft.Win32.RegistryKey to check the SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall registry key on remote computers.

https://github.com/gangstanthony/PowerShell/blob/master/Get-InstalledApps.ps1

*edit: pasting code for reference

function Get-InstalledApps {
    param (
        [Parameter(ValueFromPipeline=$true)]
        [string[]]$ComputerName = $env:COMPUTERNAME,
        [string]$NameRegex = ''
    )
    
    foreach ($comp in $ComputerName) {
        $keys = '','\Wow6432Node'
        foreach (keys) {
            try {
                $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $comp)
                $apps = $reg.OpenSubKey("SOFTWARE$key\Microsoft\Windows\CurrentVersion\Uninstall").GetSubKeyNames()
            } catch {
                continue
            }

            foreach (apps) {
                $program = $reg.OpenSubKey("SOFTWARE$key\Microsoft\Windows\CurrentVersion\Uninstall\$app")
                $name = $program.GetValue('DisplayName')
                if ($name -and $name -match $NameRegex) {
                    [pscustomobject]@{
                        ComputerName = $comp
                        DisplayName = $name
                        DisplayVersion = $program.GetValue('DisplayVersion')
                        Publisher = $program.GetValue('Publisher')
                        InstallDate = $program.GetValue('InstallDate')
                        UninstallString = $program.GetValue('UninstallString')
                        Bits = key -eq '\Wow6432Node') {'64'} else {'32'})
                        Path = $program.name
                    }
                }
            }
        }
    }
}
2 of 3
1

There are multiple ways how to get the list of installed software on a remote computer:

  1. Running WMI query on ROOT\CIMV2 namespace:

    • Start WMI Explorer or any other tool which can run WMI queries.
    • Run WMI query "SELECT * FROM Win32_Product"
  2. Using wmic command-line interface:

    • Press WIN+R
    • Type "wmic", press Enter
    • In wmic command prompt type "/node:RemoteComputerName product"
  3. Using Powershell script:

    • Thru WMI object: Get-WmiObject -Class Win32_Product -Computer RemoteComputerName
    • thru Registry: Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize
    • thru Get-RemoteProgram cmdlet: Get-RemoteProgram -ComputerName RemoteComputerName

Source: https://www.action1.com/kb/list_of_installed_software_on_remote_computer.html

🌐
TheITBros
theitbros.com › windows › miscellaneous › windows 10 › how to get list of installed programs in windows 10/11? – theitbros
How to Get List of Installed Programs in Windows 10/11? – TheITBros
January 10, 2026 - To do so, use the /node:computer switch, where the computer is the remote hostname. ... To an HTML document: wmic /output:c:\temp\InstalledApps.htm product get Name,Version,Vendor /format:htable
🌐
Software-inventory
software-inventory.net › installed-software-audit
How to Audit Installed Software from the Command Line - Tips & Tricks
These commands sends the information to a console Windows. If you need to have it in a file you can use an additional option to specify an output format and destination file. wmic product get name,version /format:csv > software-inventory.csv · The commands above extracted installed applications list from the PC where they were executed. Is it possible to perform installed applications audit remotely?
Find elsewhere
🌐
Microsoft Learn
learn.microsoft.com › en-us › answers › questions › 1164852 › how-to-get-a-list-of-software-installed-on-remote
How to get a list of software installed on remote computers - Microsoft Q&A
Hi, I am trying to get a list of software installed on remote computers in the office. I have been recommended to use the following code:Get-CimInstance Win32_Product -ComputerName $Computer but this just gives me back the software on my own ...
Top answer
1 of 1
11

os get vendor - there is no such thing as an OS vendor, that's where the invalid query is coming from. See the available properties - there's a Version, but no Vendor:

C:\>wmic os get /?

Property get operations.
USAGE:

GET [<property list>] [<get switches>]
NOTE: <property list> ::= <property name> | <property name>,  <property list>

The following properties are available:
Property                                Type                    Operation
========                                ====                    =========
BootDevice                              N/A                     N/A
BuildNumber                             N/A                     N/A
BuildType                               N/A                     N/A
CSDVersion                              N/A                     N/A
CSName                                  N/A                     N/A
CodeSet                                 N/A                     N/A
CountryCode                             N/A                     N/A
CurrentTimeZone                         N/A                     N/A
Debug                                   N/A                     N/A
Description                             N/A                     N/A
Distributed                             N/A                     N/A
EncryptionLevel                         N/A                     N/A
ForegroundApplicationBoost              N/A                     N/A
FreePhysicalMemory                      N/A                     N/A
FreeSpaceInPagingFiles                  N/A                     N/A
FreeVirtualMemory                       N/A                     N/A
InstallDate                             N/A                     N/A
LastBootUpTime                          N/A                     N/A
LocalDateTime                           N/A                     N/A
Locale                                  N/A                     N/A
Manufacturer                            N/A                     N/A
MaxNumberOfProcesses                    N/A                     N/A
MaxProcessMemorySize                    N/A                     N/A
Name                                    N/A                     N/A
NumberOfLicensedUsers                   N/A                     N/A
NumberOfProcesses                       N/A                     N/A
NumberOfUsers                           N/A                     N/A
OSLanguage                              N/A                     N/A
OSProductSuite                          N/A                     N/A
OSType                                  N/A                     N/A
Organization                            N/A                     N/A
OtherTypeDescription                    N/A                     N/A
PlusProductID                           N/A                     N/A
PlusVersionNumber                       N/A                     N/A
Primary                                 N/A                     N/A
QuantumLength                           N/A                     N/A
QuantumType                             N/A                     N/A
RegisteredUser                          N/A                     N/A
SerialNumber                            N/A                     N/A
ServicePackMajorVersion                 N/A                     N/A
ServicePackMinorVersion                 N/A                     N/A
SizeStoredInPagingFiles                 N/A                     N/A
Status                                  N/A                     N/A
SystemDevice                            N/A                     N/A
SystemDirectory                         N/A                     N/A
SystemDrive                             N/A                     N/A
TotalSwapSpaceSize                      N/A                     N/A
TotalVirtualMemorySize                  N/A                     N/A
TotalVisibleMemorySize                  N/A                     N/A
Version                                 N/A                     N/A
WindowsDirectory                        N/A                     N/A

And there is no /DOMAIN option in wmic either.

C:\>wmic /?

[global switches] <command>

The following global switches are available:
/NAMESPACE           Path for the namespace the alias operate against.
/ROLE                Path for the role containing the alias definitions.
/NODE                Servers the alias will operate against.
/IMPLEVEL            Client impersonation level.
/AUTHLEVEL           Client authentication level.
/LOCALE              Language id the client should use.
/PRIVILEGES          Enable or disable all privileges.
/TRACE               Outputs debugging information to stderr.
/RECORD              Logs all input commands and output.
/INTERACTIVE         Sets or resets the interactive mode.
/FAILFAST            Sets or resets the FailFast mode.
/USER                User to be used during the session.
/PASSWORD            Password to be used for session login.
/OUTPUT              Specifies the mode for output redirection.
/APPEND              Specifies the mode for output redirection.
/AGGREGATE           Sets or resets aggregate mode.
/AUTHORITY           Specifies the <authority type> for the connection.
/?[:<BRIEF|FULL>]    Usage information.

You could try:

wmic /NODE:"servername" /USER:"yourdomain\administrator" OS GET Name

It will prompt for your password.

🌐
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 - Press WIN+R – Type “wmic”, press Enter – In wmic command line tool type: /node:RemoteComputerName product ... – thru WMI object: Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_Product -Computer RemoteComputerName – thru Windows ...
🌐
SS64
ss64.com › nt › wmic.html
WMIC - Windows Management command - Windows CMD
Get a list of installed Windows updates on a remote machine, unlike Get-Hotfix, this includes the installation date: ... WMIC NICCONFIG where (IPEnabled=True and TcpipNetbiosOptions!=null and TcpipNetbiosOptions!=2) GET caption,index,TcpipNetbiosOptions,IPEnabled
🌐
1337 Admin
1337admin.org › windows-server › windows-server-2012-r2 › get-list-of-software-installed-from-a-remote-computer-via-wmic-from-dos
Get list of software installed from a remote computer
October 28, 2015 - wmic /user:”localhost\UserName” /password:”UsersPassword” /node:”RemoteHostname” product get name,version,vendor /format:csv > C:\SoftwareInstalled.csv · For a more powerful approach you can also do this using powershell.
🌐
TechDirectArchive
techdirectarchive.com › home › windows › get a list of installed programs locally or remotely in windows
Get a list of installed programs locally or remotely in Windows - TechDirectArchive
September 2, 2023 - To save all results in a HTML file (Tabular format), then the command is “wmic /output:software.htm product get Name, Version /format:htable” · Here is are some commands to remotely query the list of installed applications and also by Vendor ...
🌐
TechDirectArchive
techdirectarchive.com › home › windows server › how to query a list of installed programs in windows
How to query a list of installed programs in Windows - TechDirectArchive
October 24, 2024 - At the “wmic:root\cli>” prompt, type the following command: /node:EnterComputerNameHere product get name, version, vendor · Lastly, you could pull a list of installed programs, and have it saved to a text file of your choice.
🌐
Blogger
austecjenni.blogspot.com › 2015 › 10 › find-product-guid-w-wmic-or-powershell.html
Adventures in IT: Find Product GUID w/ WMIC or Powershell, & Other Useful Commands
October 7, 2015 - Output to Text file named InstalledPrograms on C: wmic product get name > C:\InstalledPrograms.txt Run wmic command for a remote computer: wmic /node:COMPUTERNAME {rest of command here} Replace COMPUTERNAME with the hostname of the machine you want the results from.
🌐
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. ... This same query could even be run against remote machines using the node switch.
🌐
Spiceworks
community.spiceworks.com › it & tech careers
Install software remotely using wmic - IT & Tech Careers - Spiceworks Community
December 28, 2018 - WMIC (Windows Management Instrumentation Command-Line) is a potent tool that often doesn’t see much use due to the lack of (easily accessible) documentation available. More information can be found on WMIC here: WMIC - T…
Top answer
1 of 7
19

You can use one of the Sysinternals tools PSinfo:

http://technet.microsoft.com/en-us/sysinternals/bb897550

PsInfo v1.77 - Local and remote system information viewer Copyright (C) 2001-2009 Mark Russinovich Sysinternals - www.sysinternals.com

PsInfo returns information about a local or remote Windows NT/2000/XP system.

Usage: psinfo [-h] [-s] [-d] [-c [-t delimiter]] [filter] [\computer[,computer[,..]]|@file [-u Username [-p Password]]]

 -u        Specifies optional user name for login to
           remote computer.
 -p        Specifies password for user name.
 -h        Show installed hotfixes.
 -s        Show installed software.
 -d        Show disk volume information.
 -c        Print in CSV format
 -t        The default delimiter for the -c option is a comma,
           but can be overriden with the specified character. Use
           "\t" to specify tab.
 filter    Psinfo will only show data for the field matching the

filter. e.g. "psinfo service" lists only the service pack field. computer Direct PsInfo to perform the command on the remote computer or computers specified. If you omit the computer name PsInfo runs the command on the local system, and if you specify a wildcard (\*), PsInfo runs the command on all computers in the current domain. @file PsInfo will run against the computers listed in the file specified.

Issuing

PSinfo -s \\computername

will tell you what is installed on a remote computer.

2 of 7
11

On an rpm-based Linux distribution, you could run the following:

ssh <user-who-can-run-rpm>@<remote.host> 'rpm -qa | sort'

For a deb-based distribution, pass this to the ssh command:

'dpkg-query -l | sort'

For Gentoo (per a supplied comment from Monksy):

'qpkg -I | sort'

For Solaris:

'pkginfo -i | sort'

And on AIX:

'lslpp -a all | sort'
🌐
GitHub
gist.github.com › psatler › 010b26cd57e758278823d7027c40e2a6
List the installed programs on Windows · GitHub
Wait for the wmic prompt get back to you again and you'll know it has finished listing the files into the txt file · The solution below was gotten from this stackoverflow response. import winreg def foo(hive, flag): aReg = winreg.ConnectRegistry(None, hive) aKey = winreg.OpenKey(aReg, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", 0, winreg.KEY_READ | flag) count_subkey = winreg.QueryInfoKey(aKey)[0] software_list = [] for i in range(count_subkey): software = {} try: asubkey_name = winreg.EnumKey(aKey, i) asubkey = winreg.OpenKey(aKey, asubkey_name) software['name'] = winreg.QueryVal
Top answer
1 of 3
2

Duplicate of this question but to answer the question in WMIC use:

wmic /node:server for remote machines.

In Powershell, Get-WMIObject has the -ComputerName parameter allowing you to run the command against a remote computer.

Try: Get-WMIObject -Class Win32_Product -ComputerName RemoteMachine101

2 of 3
0

I figured out the problem and this is what I did.

First, I added a GPO that to the computer configuration that would accept WMI-In. That fixed the "RPC server is unavailable" response.

Second, I ran an IP scan using Angry IP of all available nodes. Then I exported the list to a CSV file and then modified it so that only the IP addresses showed. I then saved it as a text file.

Next, I created a PowerShell script. The script pulls the IP addresses from the txt file I previously generated. The script will run each IP address and save the results of each IP in a sperate file. Below is the script:

$IPAddress = Get-Content Z:\Installed-Software\ip-addresses.txt
foreach($ComputerName in $IPAddress) { 
echo $ComputerName
Get-WmiObject -Class Win32_Product -ComputerName $ComputerName | Select-Object Name, IdentifyingNumber | Export-Csv C:\Installed-Software\$ComputerName-installed-programs.csv }

You could run the scan on an entire subnet but I chose to scan or available nodes and run the script only on those nodes. Since it takes a minute or 2 to generate the results I figured by eliminating all offline nodes it would save some time.

Hope this helps someone. Special thank you to user4317867 for the push.