ScriptIntermediateRead-only

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.

Keep Moving

Take the workflow further

Use the related material to understand the surrounding system, practice the workflow, or choose another operator asset.