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
- Run from an elevated PowerShell session only if your environment requires registry access elevation.
- Collect both 64-bit and 32-bit uninstall registry views.
- Filter out blank DisplayName values before exporting results.
- Use the local mode first to confirm output shape on one machine.
- Use remote single-host mode for support triage, then host-list mode for audits.
- 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 -AutoSizeValidation
- 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.