PowerShell Genie

Inventory software from Windows uninstall keys

Script 2 min read Windows PowerShell 5.1 and PowerShell 7

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, InstallDate

Script reader

Inspect before you run

Inspection only

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
    1. Stage 1$PathsPositional values or no named parameters
    2. Stage 2Where-ObjectPositional values or no named parameters
    3. Stage 3Select-ObjectPositional 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.

      Practise the underlying skill

      Try a related exercise →

      Read the primary Microsoft documentation

      Genie guideInventory software from Windows uninstall keys

      Read machine-wide uninstall registry entries without invoking Win32_Product, and understand which installations the report can miss.