Inventory software from Windows uninstall keys
Documentation: Microsoft Learn
Read machine-wide uninstall registry entries without invoking Win32_Product, and understand which installations the report can miss.
Example reviewed 1 October 2026 · Illustrative output · Not a live system check
The script
$Paths = @(
'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*'
'HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*'
)
Get-ItemProperty -Path $Paths -ErrorAction Stop |
Where-Object DisplayName |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDateScript reader
Inspect before you run
Inspect the script below. It does not run in this browser.
Inspection only — no command has run.
Show reference output
Fictional reference snapshot · 03 October 2026, 09:00 UTC. This is an example result, not a check of your systems.
DisplayName DisplayVersion Publisher InstallDate ----------- -------------- --------- ----------- Training App 1.0.0 Demo Systems 20261001
Inspect this example’s structure
Read the command and its supplied arguments. This example requires real PowerShell or its module; this diagram does not execute it.
$Paths = @(
'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*'
'HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*'
)
Get-ItemProperty -Path $Paths -ErrorAction Stop |
Where-Object DisplayName |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate- Stage 1$Paths
Positional values or no named parameters - Stage 2Where-Object
Positional values or no named parameters - Stage 3Select-Object
Positional values or no named parameters
Illustrative output
This example shows the expected shape for fictional data. Your values and formatting will differ.
DisplayName DisplayVersion Publisher InstallDate Example Editor 2.4.0 Example Vendor 20260910
How it works
The two registry paths cover common machine-wide uninstall locations. Entries without DisplayName are omitted. InstallDate is installer-provided text and may be missing or inconsistent.
Before you run it
This is Windows-only. Use an appropriate process architecture and permissions. On a machine without one of the registry paths, review the error and query the existing path explicitly; do not mistake a failed query for a complete inventory.
Check the result
Compare a known installed product with its entry. Per-user software, portable applications and some packaged apps need separate sources. This report is not a complete software-asset inventory.
If nothing is returned
Check registry access and path availability. No returned uninstall entries does not establish that no software is installed.