Get-RemoteProgram Get list of installed programs on remote or local computer

This script generates a list by querying the registry and returning the installed programs of a local or remote computer. It allows for retrieval of additional properties such as the uninstall string of an application as well.

 
 
 
 
 
4.4 Star
(66)
134,758 times
Add to favorites
Operating System
8/5/2019
E-mail Twitter del.icio.us Digg Facebook
  • Nicer error on switched off computers
    1 Posts | Last post February 12, 2020
    • Great script and it's working well if all the computers in my txt file are turned on.
      When some are turned off the results look messy!
      
      eg
      ComputerName  ProgramName installdate
      ------------  ----------- -----------
      3A321-2019-07 AB Tutor v8 20190726   
      Get-RemoteProgram : Exception calling ".ctor" with "2" argument(s): "A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because 
      connected host has failed to respond 10.107.80.55:445"
      At line:1 char:1
      + Get-RemoteProgram -ComputerName (Get-Content -Path D:\scripts\remotes ...
      + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
          + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Get-RemoteProgram
      
      Is it possible to update the script so it outputs something friendlier if the PC is unresponsive?
  • To run Get-RemoteProgram through Invoke-Command.
    2 Posts | Last post February 10, 2020
    • I tried it, basicly making a "program" with only 1 line - call to function without parameters, function is in the body.
      It gives :
      
      Exception calling ".ctor" with "2" argument(s): "No connection could be made be
      cause the target machine actively refused it [::1]:445"
          + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorExcep
         tion
          + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorExceptio
         n,Get-RemoteProgram
          + PSComputerName        : TargetPC
      
      When I call the program locally it works fine
    • It seems I overlooked it is NOT working locally... due to GPOs it works on some PC, doesn't work on others :S
      Is it possible to be made as only locally working? If it works with Invoke-command it will be just fine :/
  • error when running against remote computer
    3 Posts | Last post February 06, 2020
    • Jaap -
      
      The script works perfectly on my local machine but when I try to run it against a remote computer I get the following error:
      
      get-remoteprogram : Exception calling "OpenRemoteBaseKey" with "2" argument(s): "The network path was not found."
      
      The target computer is online, I have admin permissions, and can query "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" via Invoke-Command.
      
      Any ideas?
      
      Thanks.
      
      - Matt
    • same problem :(
      maybe great program, but won't run against remote computers
    • Sorry notifications for comments on TechNet are coming through a bit delayed. So if your credentials are working there's two things that come to mind:
      
      Is the Remote Registry Service running on the system you are trying to query?
      Is a firewall blocking the request, Invoke-Command goes via PowerShell Remoting where as remote registry uses custom ports.
      
      For more information have a look here:
      https://community.spiceworks.com/topic/268762-need-some-clarification-on-port-445-and-remote-registry
      
      Alternatively if you don't want the service to be running or to open up additional ports you can opt to run Get-RemoteProgram through Invoke-Command.
  • Roles and Features
    1 Posts | Last post November 19, 2019
    • Thanks for putting this together! Will this enumerate the roles and features installed on the server as well? Specifically, will  this include the version of .NET when installed via the server roles and features menu?
  • LastAccessTime Not Working
    1 Posts | Last post October 21, 2019
    • Using this command:  Get-RemoteProgram -ComputerName MyServerName" -Property LastAccessTime
      
      I get back most of the installed programs, there is a column for "LastAccessTime" but it's blank for all remote servers I query - I'm only remote connecting to servers that are compatible per your documentation such as Server 2008 R2
      
      Also, I know the server has IE and Adobe but they are not on the list of programs?
      
      Any ideas?
  • LastAccessTime Not Working
    1 Posts | Last post October 21, 2019
    • Using this command:  Get-RemoteProgram -ComputerName MyServerName" -Property LastAccessTime
      
      I get back most of the installed programs, there is a column for "LastAccessTime" but it's blank for all remote servers I query - I'm only remote connecting to servers that are compatible per your documentation such as Server 2008 R2
      
      Also, I know the server has IE and Adobe but they are not on the list of programs?
      
      Any ideas?
  • Export to CSV file
    1 Posts | Last post October 09, 2019
    • Is there a way for this to report out to a CSV file.
      Either a tab for each computer or on one tab so it is easier to compare what one system has and another does not.
  • Thank you
    1 Posts | Last post September 26, 2019
    • Hey Jaap Brasser, thank you very much. Your script rules like a boss xD
  • How to use this script
    2 Posts | Last post September 26, 2019
    • Is there any document on how to use this script (PS i am a novice to scripting)
    • * Save the script in some folder with get-remoteprogram.psm1 (pay atention to PSM1 file extension);
      * Open Powershell in elevated way and go to folder where get-remoteprogram.psm1  is inside. Run the cmdlet:
      
      import-module get-remoteprogram.psm1 (Maybe no output will occur. it's ok.)
      
      * inside the PMS1 file between line 50 - 117 are the sintaxe and examples.
      
      Have fun :)
      
      
      
  • Host offline
    1 Posts | Last post August 29, 2019
    • Hello Jaap,
      
      When looping through an array of Hosts, do you have a suggestion for skipping offline Hosts? 
      
      Right now I am doing this 
      
      
      if (Test-Connection -Count 1 -TimeToLive 50 $targetset.Trim() -Quiet){
       Write-Host "Ping was good for " $targetset.Trim()
       $results += Get-RemoteProgram -ComputerName $targetset.Trim() -Property DisplayVersion | Where-Object ProgramName -eq 'Symantec Endpoint Protection' 
       }
       else{Write-Host "Could not ping " $targetset.Trim()}
      }
      
      }
      $results
      
      Which works, but it's really slow.
1 - 10 of 83 Items