Installed Application Inventory for Windows Endpoints

A read-only PowerShell inventory starter for collecting installed applications from local or remote Windows endpoints.

Good For

  • software audits
  • migration prep
  • support handoff
  • baseline documentation

How to Use It

  1. Run from an elevated PowerShell session only if your environment requires registry access elevation.
  2. Collect both 64-bit and 32-bit uninstall registry views.
  3. Filter out blank DisplayName values before exporting results.
  4. Use the local mode first to confirm output shape on one machine.
  5. Use remote single-host mode for support triage, then host-list mode for audits.
  6. Export to CSV when comparing systems or attaching evidence to a ticket.

Execution Modes

  • local
  • remote-single-host
  • remote-host-list

Inputs and Outputs

Inputs

  • local computer
  • single hostname
  • CSV host list
  • TXT host list
  • future Active Directory query

Outputs

  • verbose-console
  • csv

Command Starter

Safe to run: read-only

# ---------------------------------------------------------------------
# Operator inputs
# ---------------------------------------------------------------------
$ComputerNames = @('localhost')
$OutputPath = '.\windows-software-inventory.csv'

# ---------------------------------------------------------------------
# Read machine-level uninstall registry views from each endpoint
# ---------------------------------------------------------------------
$Results = foreach ($ComputerName in $ComputerNames) {
    Invoke-Command -ComputerName $ComputerName -ScriptBlock {
        $UninstallRoots = @(
            'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*',
            'HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*'
        )

        foreach ($Root in $UninstallRoots) {
            Get-ItemProperty -Path $Root -ErrorAction SilentlyContinue |
                Where-Object { $_.DisplayName } |
                ForEach-Object {
                    [pscustomobject]@{
                        ComputerName  = $env:COMPUTERNAME
                        DisplayName   = $_.DisplayName
                        DisplayVersion = $_.DisplayVersion
                        Publisher      = $_.Publisher
                        InstallDate    = $_.InstallDate
                        RegistrySource = $Root
                    }
                }
        }
    }
}

$Results | Export-Csv -Path $OutputPath -NoTypeInformation -Encoding UTF8
$Results | Sort-Object ComputerName, DisplayName | Format-Table -AutoSize

Validation

  • The CSV contains app names, versions, publishers, and install dates where available.
  • Known installed applications appear in the export.
  • Blank registry entries are filtered out before review.

Reporting

  • Use the CSV as the starter inventory artifact for support, migration, or baseline documentation.
  • Machine-level uninstall keys are the deliberate starter scope; per-user installs, Store apps, and package-manager sources belong in an expanded report pack.

Safety Notes

  • Keep the default inventory mode read-only.
  • Avoid Win32_Product inventory because it can trigger MSI repair behavior.