Today, well take a look at how to get the list of all installed software using PowerShell. Obviously, monkeying with the registry is not always an IT pros first choice because it is sometimes associated with global warming. At first glance, Win32_Product would appear to be one of those best solutions in the path of least resistance scenario. Today, we saw how our Support Engineers get the list of all installed software using PowerShell. Function, In a script that Sean uploaded to the Microsoft TechNet Script Center Repository, Sean references a technique to enumerate through the registry where the Currently installed programs list from the Add or Remove Programs tool stores all of the Windows-compatible programs that have an uninstall program. Part 1: Powershell: Get registry value data from remote computer Part 1.1: Microsoft Powershell: Export remote registry information to excel Part 2: Microsoft Powershell: remotely write, edit, modify new registry key and data value Part 3: Microsoft Powershell: Delete registry key or values on remote computer Were going to start by creating a .NET registry object: And then open a remote connection, specifying a computer name: And if it is successful, we wont get any ouput. If you have any questions, send email to me at scripter@microsoft.com or post your questions on the Official Scripting Guys Forum. Now lets see how our Support Engineers list the installed software locally. Description: The Windows Installer service entered the running state. How can I use Windows PowerShell to see hotfixes that were installed on my computer Summary: Learn how to copy Windows PowerShell profiles from your computer to SkyDrive. #Define the variable to hold the location of Currently Installed Programs $UninstallKey=SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall #Create an instance of the Registry Object and open the HKLM base key $reg=[microsoft.win32.registrykey]::OpenRemoteBaseKey(LocalMachine,$computername) #Drill down into the Uninstall key using the OpenSubKey Method $regkey=$reg.OpenSubKey($UninstallKey) #Retrieve an array of string that contain all the subkey names $subkeys=$regkey.GetSubKeyNames() #Open each Subkey and use the GetValue Method to return the string value for DisplayName for each. 2. Get installed software list with remote Get-WmiObject command The below cmdlet is the easiest one but can take some time to finish: Get-WmiObject Win32_Product -ComputerName $pcname | select Name,Version where $pcname is the name of the computer we want to query. If you copy and paste it into your console, you should be able to just run it like: 'Get-InstalledSoftware'. If you want to explore the . (function($) {window.fnames = new Array(); window.ftypes = new Array();fnames[0]='EMAIL';ftypes[0]='email';fnames[1]='FNAME';ftypes[1]='text';fnames[2]='LNAME';ftypes[2]='text';fnames[3]='ADDRESS';ftypes[3]='address';fnames[4]='PHONE';ftypes[4]='phone';}(jQuery));var $mcj = jQuery.noConflict(true); How to Build an RDS Farm with Windows 2019 Using RDS, Installing and Configuring Sonarr and integrating, How to setup and host your own Forum on a WordPress Website, Configuring Veeam SureBackup Automated Restore Testing, Click to share on Twitter (Opens in new window), Click to share on Facebook (Opens in new window). Marc Carter is joining us again today with another guest blog post. Applications and WMI scripts can be deployed to automate administrative tasks on remote computers or interface with other Windows tools like System Center Operations Manager (SCCM) or Windows Remote Management (WinRM). This will list all programs installed on your computer including the Windows Store apps that came pre-installed as you can see below. Installing Mozilla Firefox remotely Now the show begins. So if we are simply getting data on our local computer, we can just: And we get great data in a moderate to poorly usable format: Immediate usefulness aside, we now know that PowerShell 6.1.1 is currently installed on my system and that I should probably update that. I found the original script in the October 2019 issue of "Maximum PC" on page 25, and after some slight modifications, I found it to be quite useful and wanted to share for others to benefit from . Using the Get-Service PowerShell cmdlet, you can generate a list of Windows Services running on your Windows 10/8/7 computer. This consistency check could cause a repair installation to occur. How can I determine what default session configuration, Print Servers Print Queues and print jobs. To launch the Windows Settings App, you can also use the ms-settings:appsfeatures URI schema as shown below. This is just a quick reference for anyone trying to quickly pull off a list of installed software from a remote machine. If you create a list of all the computer names in your network, you can use the methods below within a Foreach loop to return results from more than a single remote PC. Registry entries and values are not components of that hierarchy. Software, The script points to a CSV file that I keep up to date with a list of servers from our domain. if ($Connection -eq $null){ $_.vendor -notlike *PGP* -and $_.vendor -notlike *Intel* -and $_.vendor -notlike *Corel* -and $_.vendor -notlike *Adobe* -and $_.vendor -notlike *ABBYY* -and $_.vendor -notlike *Sun* -and $_.vendor -ne SAP -and $_.vendor -ne Marvell -and $_.vendor -ne Hewlett-Packard -p Specifies password for user name. Conclusion Installing software using Msiexec Before we proceed we need to understand Msiexec briefly and what is Msiexec. These are essential site cookies, used by the google reCAPTCHA. Get the code Description Get-InstalledSoftware opens up the specified (remote) registry and scours it for installed software. Each of us plays a different note in that we all hear and see things differently. PowerShell Installing software remotely on Multiple Computers Swapnil Infotech 612 subscribers Subscribe 275 26K views 1 year ago PowerShell Scripts In this video you will be able to. Hey, Scripting Guy! How do you ensure that a red herring doesn't violate Chekhov's gun? Required fields are marked *. Make sure the Uninstall screen is active. The script and associated output are shown in the following figure. To learn more, see our tips on writing great answers. First of all, it's important to know where exactly the software list is stored. but this book provides the basic foundation of how Powershell works so you will be able to get the most out of bleeding-edge articles from CNET. Im pulling out a time-tested PowerShell function from my days on the service desk today. This will output a TXT file with the list of programs. To do that, I'll need to enumerate all of the registry keys under the HKEY_USERS hive. Windows Server PowerShell Windows Server: A family of Microsoft server operating systems that support enterprise-level management, data storage, applications, and communications. Until then, peace. Remote registry queries are slightly more complicated and require the Remote Registry service to be running. elements because, by default, event logs are set to overwrite the oldest records We can use said method like so: And of course, we could write a foreach loop to look at all the values: But that is only good for 1 registry location on 1 computer, so thats not going to do us much of any good, unless you only manage your own computer. Such is the case for sys admins when determining what software is currently configuring a server. $Install_soft = gwmi win32_product -ComputerName $Comp -Credential $Connection | ############################################################################################# For that, we need to create a list of all the computer names in the network. It is built as a function that allows you to query one or more computers and includes logging and error handling as well. Summary: Learn how to use Event Viewer custom views in Windows PowerShell to parse event logs quickly. One way that comes to mind (and again, visible within the comments from the previous post), is addressing the issue of how to query multiple remote devices. Read about career opportunities available at CodeTwo. Recently I came across a forum question where I have seen people using Win32_Product WMI class to get the installed installed applications list from remote . The interesting articlewhat if you want to print all apps .exe on computer with DisplayName, Publisher, InstallDate ?for example I have in my computer program called Putty when i RUN this commmand putty not inculded and alots of exe apps Get-ItemPropertyHKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*| Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |Format-Table AutoSizeCould you show how to print all exe files with product name , DisplayName, Publisher, InstallDate ?Thanks. HKLM:\SOFTWARE\Wow6432node\Microsoft\Windows\CurrentVersion\Uninstall. List Installed Software with PowerShell PS> Get-InstalledSoftware -ComputerName XXXXX When you do this, you will get an object back for each piece of software that's installed. In the example above, running this on my home laptop, you will see the Invalid class error if you try querying against it without an SMS/SCCM client installation. This process initiates a consistency check of packages installed, and then verifying and repairing the installations. Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* |select displayname returns 29 results. This will locate any vendor with a V in its name. Asking for help, clarification, or responding to other answers. The method used in this script gets only the value of the DisplayVersion attribute. But the CimCmdlets modules contain cmdlets that interact with Common Information Model (CIM) Servers like the Windows Management Instrumentation (WMI) service. Do you need to buy from a local reseller? How can we get details on what software was installed by other software? You could do something like that (the script assumes you have a CSV file with the ComputerName header: $pcnames = Import-Csv -Path $pcnames = $pcnames.ComputerName foreach ($pcname in $pcnames){ $pcname; Get-WmiObject Win32_Product -ComputerName $pcname | select Name,Version }, Many Thanks for this If I need to use registry script for remote computer and make it list specific software for example list firefox and its version, This section explains how to do this. In certain situations, we may need to check the list of installed software and its version and for this, we can make use of PowerShell. Lines 3 and 4 should be swapped in your last code box. Marketing cookies are used to track visitors across websites. It contains several useful methods and a variety of properties. This Powershell script list all the installed applications (32/64), particularly useful when we try to audit the list of installed software also helpful in license validation. By the way, WinRM is enabled on Windows Server OS by default. Microsoft Scripting Guy, Ed Wilson, is here. _gat - Used by Google Analytics to throttle request rate _gid - Registers a unique ID that is used to generate statistical data on how you use the website. You can run Get-Package on remote computers by running it as part of an Invoke-Command or Enter-PSSession command or script. This list does not include built-in Windows tools. following cmdlet is, again, the easiest in the bunch, but can take some time to Notify me of follow-up comments by email. Ill show you several methods you can use to check that with PowerShell. } One other possibly less obvious and slightly more complicated option is diving into the registry. The HKU registry key will only be available if a user is logged in. The Microsoft Partner status indicates that CodeTwo holds significant technical expertise in the development of innovative and reliable software solutions for Microsoft platforms. Is there any way we can run this for multiple servers by passing the value in a loop from a .txt or .csv file? The following command wmic product get name will list all the installed application o your device. I gave this a quick try and while I do get results, the list seems to be horribly incomplete as compared to what shows up via other methods. Remember, we are simply looking for what has been installed on our systems, and because we have been dealing with WMI, lets stay with Get-WmiObject, but look at a nonstandard class, Win32Reg_AddRemovePrograms. ############################################################################################# Once downloaded, run WmiExplorer.exe. Once your account is created, you'll be logged-in to this account. What is the purpose of this D-shaped ring at the base of the tongue on my hiking boots? I started in the IT industry in 1996 with DOS and various flavors of *NIX. [String[]]$Computer, This process initiates a consistency check of packages installed, and then verifying and repairing the installations. If you have any questions, send email to me at, Use Custom Views from Windows Event Viewer in PowerShell, See Why PowerShell Can't Export Some Properties to CSV, Login to edit/delete your existing comments, arrays hash tables and dictionary objects, Comma separated and other delimited files, local accounts and Windows NT 4.0 accounts, PowerTip: Find Default Session Config Connection in PowerShell Summary: Find the default session configuration connection in Windows PowerShell. Step 1: After logging into the Action1 dashboard, in the Navigation pane (the left column), select Managed Endpoints and mark the endpoint to get a list of installed software. There was a wrong line break in the code box. When found it returns a list of the software and it's version. The syntax below will call the command and then specify a class we want to return information on. Product Version: . Purchase new maintenance contracts, extend existing ones and discover the benefits of having a valid support agreement for your CodeTwo product. Another To quickly check what software is installed on a computer, you can remote into the console of a client or server and bring up the Programs and Features control panel applet. 2. get this hello Method invocation failed because [System.String] doesnt contain a method named foreach. I dont want to go into details on that because there is a multitude of information on this topic already. Technical documentation, manuals, articles and downloads for all CodeTwo products. . My modified version of Seans script creates a PSObject to hold the properties I am returning from each registry query, which then get dumped into an array for later use. Check installed software with remote registry query. Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |select displayname returns 10 results. Ask questions, submit queries and get help with problems via phone or email. Below is one example and the result. Is it plausible for constructed languages to be used to affect thought and control or mold people towards desired outcomes? Our experts have had an average response time of 10.78 minutes in Jan 2023 to fix urgent issues. Windows PowerShell Step by Step Get your Kindle here, or download a FREE Kindle Reading App. Use PowerShell to get a list of installed software from remote computers This is just a quick reference for anyone trying to quickly pull off a list of installed software from a remote machine. Trying to understand how to get this basic Fourier Series. Why is there a voltage on my HDMI and coaxial cables? Otherwise, you will only see one of the HKLM registry keys. Login to edit/delete your existing comments, Thank you! Its one of the things that makes work interesting. Thats fine, it just makes things a little more complicated and gives us even more reason to turn this into a function! Each of the methods mentioned above can also be used to check software installed on other machines in the same network. Depending on the way in which the software installed, the software can be found in one of three different registry keys: HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall or HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall for machine-based installs or HKU:\\Software\Microsoft\Windows\CurrentVersion\Uninstall for user-based installs. Or browse all disk partitions in search of a specific app. In our above example, it'll be $MyProgram.uninstall () This command will uninstall your program. The easiest way to remedy this would be to run Enable-PSRemoting on the remote host. Is there a single-word adjective for "having exceptionally strong moral principles"? Step 3: Choose Script language and type this command to get a list of installed software: HowTos. Event ID: 7035/7036Description: The Windows Installer service entered the running state. However, because we are talking about alternative routes, let us look at another way to get us to arrive at the same location before we burst the bubble on Win32_Product. The first step is to create an array of each machine-based registry path. Note: Starting in PowerShell 3.0, the Get-WmiObject cmdlet has been superseded by Get-CimInstance. Looking back a couple years ago to my previous post, Use PowerShell to Quickly Find Installed Software, I find it interesting to reflect on common issues shared amongst the IT pro community. Learn how to use Powershell to list the installed applications on a computer running Windows in 5 minutes or less. We will keep your servers stable, secure, and fast at all times for one fixed price. I started in the IT industry in 1996 with DOS and various flavors of *NIX. Hi, is there any way to then only get the value of an DisplayVersion? Summary: Learn how to use Windows PowerShell to quickly find installed software on local and remote computers. Using each registry values name as a property and the actual data for the property value. Find Installed Software using SCCM CMPivot In the CMPivot tool, select the Query tab. If you'd rather not build your own code to do this, I've already built a function called Get-InstalledSoftware that uses this method. The Win32_product class is not query optimized. Unfortunately, not everyone knows this. Description. basically i want to provide a txt file with 50 PC names, hey Adam, how can I use this script when I need to check hundreds of remote pcs in a domain. Log on to your Domain Controller and enter the following lines to install Firefox on CL01. Did you actually bother reading the error message? You can get the local computers software installation: Or you can get a remote computers installed software: Or, most usefully I would argue, you can get a list of computers from AD and get their installed software: If you found this useful, great! To enumerate the installed software, it reads the . being very easy, this method has a major downside it takes quite a while to See you tomorrow. First of all, it's important to know where exactly the software list is stored. Either way, weve now reduced the process to a one-liner that can be used in 64-bit and 32-bit environments: Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table AutoSize, Absolutely! Get-Help WinRM. The code provided does not work against multiple computers. Here you can find the list of all installed apps including modern UWP apps from the Microsoft Store. _ga - Preserves user session state across page requests. Registry entries and values are not components of that hierarchy. } Win32 provides several ways to list running processes. [Good] The Win32_Product WMI class represents products as they are installed by Windows Installer. However, blocking some types of cookies may impact your experience of the site and the services we are able to offer. Leave me a comment, tweet at me on Twitter, email me, whatever. List installed programs on remote computers with PowerShell, Disable Windows 10 telemetry with a PowerShell script. Msiexec allows you to install, modify, and run Windows Installer commands from the command line. You could, however, get a list of all PCs to a CSV file, and then use a foreach loop to go through all the PCs, adding their names to the -ComputerName parameter. To view the list of installed programs, kindly refer to this guide for more information: How to query a list of installed programs in Windows via Windows Settings, Control Panel, WMIC, PowerShell and Windows Registry. Download PowerShell Script Please find the actual code of this script from Github below link https://raw.githubusercontent.com/jampaniharish/OnlineScripts/master/Get-installedPatch.ps1 <# .Synopsis This script will get details of perticular patch installed on remote computer. I see that similar mindset and participation reflected in the esprit de corps (or cohesion) of the Windows PowerShell community. Your question was not answered? Here is the essence of KB974524. If you want to view your installed programs with PowerShell, follow the below suggestions . Never again lose customers to poor server speed! CodeTwos ISO/IEC 27001 and ISO/IEC 27018-certified Information Security Management System (ISMS) guarantees maximum data security and protection of personally identifiable information processed in the cloud and on-premises. For a complete list of the Ms-Settings URL command, kindly visit this link. EDIT: Thanks to u/DarrenDK for pointing out that this script will only list installed 32-bit software**:** . Recovering from a blunder I made while emailing a professor. Here at Bobcares, we have seen several such PowerShell related queries as part of our Server Management Services for web hosts and online service providers. Below is the exp Hey! I can now look for keys that have user SIDs in them and add them to the array I created earlier. Simply call this method on your program to uninstall it. In this method, we simply paste a simple query: Also, we can filter the data to find specific applications from a single vendor, together with their versions, for example: This method is quite easy. Equation alignment in aligned environment not working properly. Hands-on on Windows, macOS, Linux, Azure, GCP, AWS. We are talking Windows PowerShell after all. Get-ItemProperty does not have a built-in remoting command like Get-WmiObject does which means you would need to wrap it in Invoke-Command if you want to get results from remote computers. } | ############################################################################################# This command gets a list of packages that were installed by PackageManagement on a remote computer. Next, I'll wrap up all of this code into a scriptblock and execute it on the remote computer. If you save it as a file, import it using Import-Module. Scoping out the registry, we can find two paths that holds all of the data we need for software. , , , . Product Name: . Remote registry queries are slightly more complicated and require the Remote Registry service to be running. There are many ways to do this, heres what Im using inside of the Process{} block: Then we need to declare our output object and the 2 [Microsoft.Win32.RegistryKey] objects for connecting to the remote registries: Finally, well have our loop where we grab all of the data. The data that Ive decided is the most useful is the following, and youll notice that Im using the .GetValue() method we saw from before: So that turns into the following Get-InstalledSoftware function (Which you can now find in my Utilities Repo). Instead, they are properties of each of the keys. Somehow like u explained with the -like Mozilla* command can I filter for -like DNSNAME*. A sample query is as follows: We can check a users event log remotely by adding a single attribute (-ComputerName) to the cmdlet used before: If we apply a certain software version via GPO, then we can easily check if this GPO was successfully applied to a user or not. To do this, you will have to launch PowerShell with Administrative rights. Is a PhD visitor considered as a visiting scholar? Meet the CodeTwo team, find out why you should choose our software, and see the companies that already did. I hope you found this blog post helpful. Learn more about using PowerShell to check Windows Event Logs and filtering results. For instance, let us talk about the task of determining which applications are installed on a system. But before you can do that, you need to write that function. NID - Registers a unique ID that identifies a returning user's device. Here are the different methods that we can use within a Foreach loop to return results from more than a single remote PC. Save my name, email, and website in this browser for the next time I comment. Check recently installed software list from the Event Log remotely. First, in an administrative PowerShell console, download and install the PSSoftware PowerShell module from the PowerShell Gallery by running Install-Module PSSoftware. This command prompts you to provide the specified user's password. -s Show installed software. For the Nozomi from Shinagawa to Osaka, say on a Saturday afternoon, would tickets/seats typically be available - or would you need to book? ) return the results. Solution: (Understanding) Do your part and help spread the word. However, applications can be installed per user as well. To get a list of installed applications by vendor, kindly run the command below. If it was installed for all users, itll be listed in one of two locations: And if it was installed for the current user, it can be found: If you are a human being and you take a look at any of those directories, youll probably notice why there is the App Wizard for tracking installed software. Team up with us to become our reseller, consultant or strategic partner. the cmdlet used before: If you applied One of the basics of PowerShell that is often overlooked (I say that because I often overlook it) is the difference between the While loop and the Do-While l "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall", "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall", "HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall", "Software\Microsoft\Windows\CurrentVersion\Uninstall", "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall", .