I was wondering if there is an easy and lightweight method to viewing what programs are installed on a remote machine? I am tempted to use Spiceworks but I would like something more lightweight like a script. I have been playing around with WMIC a little and can get a list of programs for my computer but I don't know if I can do the same with it for a remote computer. Any ideas?

Edit: Sorry that I forgot the OS, we are using mostly Windows XP and 7, I use Windows 7. I am looking for something to be run in the background without a user that is currently using the computer knowing. I would like to be able to do it during the workday while people are working and do so without interrupting them. I do appreciate the Linux answers since I am trying to learn more about Linux and plan to personally change over sometime.

  • 7
    It would help to know the OS of the machine.
    – raphink
    Sep 12, 2011 at 20:50
  • Why just programs? There may be other copyrighted material on the system (font files and mp3s are obvious cases)
    – symcbean
    Sep 13, 2011 at 12:45
  • @symcbean My main reason to ask is for licensing. We have a couple programs that we only have a hand full of licenses for and I need to figure out where the programs are installed so I can determine if I can uninstall it somewhere so another user can use the program or if I need to purchase a new license. The other stuff I will look into at a later point.
    – Mobojo
    Sep 13, 2011 at 17:27

7 Answers 7


You can use one of the Sysinternals tools PSinfo:


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.


PSinfo -s \\computername

will tell you what is installed on a remote computer.


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'
  • 1
    Gentoo: If you have gentoolkit installed on gentoo you can find out all of the installed packages with: "qpkg -I"
    – monksy
    Sep 13, 2011 at 14:37
  • Can I use this on a Linux machine to view information on a Windows machine or is it just for Linux to Linux?
    – Mobojo
    Sep 14, 2011 at 13:05
  • @Mobojo - not sure if you can run a similar command from a *nix machine to a Windows one; you should certainly be able use any ssh client to run these commands from any originating machine to *nix, though
    – warren
    Sep 14, 2011 at 13:34

WMIC can be used remotely, by default, with an account that is part of Administrators group. You can delegate read-only WMI access to a normal user.

SNMP can be used too - you just need to configure a read-only community. You need to browse hrSWInstalled table: snamwalk -c public -v2c server_IP hrSWInstalled

See also: http://technet.microsoft.com/en-us/library/bb742610.aspx


Here is a PowerShell script that will connect to the HKLM\Software\Microsoft\Windows\Uninstall registry key, pull the keys, get their display names and send to a text file.

$MachineName = 'somecomputername'
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::'LocalMachine', $MachineName)

#connect to the needed key :

$regKey= $reg.OpenSubKey("software\Microsoft\Windows\currentversion\uninstall\" )

#and list the properties :

$programs = $regkey.GetSubKeyNames()
foreach ($program in $programs)
    $regKey2 = $regKey.OpenSubKey($program)

    $temparray +=  $regKey2.GetValue("DisplayName")
$temparray |Sort-Object |Out-File -FilePath "C:\testinstalledprograms.txt" -Force

There are a million programs that will do this. Some more easy and lightweight than others.

Here's just one of the innumerable programs that do this:



If it's a windows machine, you can run "WinAudit" (free, just search for it) on a scheduled job. It generates HTML or text reports and such, of which you can save to a network drive and view from a remote computer.


Remote desktop. You connect, and use it as if it were a local machine. Works in *nix too.


You can use WMI from powershell:

gwmi win32_product -ComputerName Computer1

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