Method 1 — WMIC (Windows 10 and Earlier)
WMIC (Windows Management Instrumentation Command-line) has been the classic one-liner for listing installed software for over a decade. Open Command Prompt (no elevation required for most queries) and run:
wmic product get name,version,vendor,installlocationThis queries the Win32_Product WMI class and returns every MSI-based application. The output is tab-separated and can take 30–90 seconds on machines with many installs — the class triggers a consistency check on each package during the query, which is why it is slow.
To export directly to a CSV from Command Prompt:
wmic product get name,version,vendor /format:csv > "%USERPROFILE%\Desktop\installed-apps.csv"Method 2 — PowerShell Get-WmiObject (Legacy, Broad Coverage)
Get-WmiObject queries the same Win32_Product WMI class as WMIC but gives you PowerShell's filtering and formatting pipeline. This is useful for filtering and exporting in one step:
# List all MSI-installed apps sorted by name
Get-WmiObject -Class Win32_Product |
Select-Object Name, Version, Vendor, InstallDate |
Sort-Object Name |
Format-Table -AutoSize# Export to CSV
Get-WmiObject -Class Win32_Product |
Select-Object Name, Version, Vendor, InstallDate |
Sort-Object Name |
Export-Csv -Path "$env:USERPROFILE\Desktop\installed-apps.csv" -NoTypeInformationTo filter for a specific vendor (e.g., all Microsoft products):
Get-WmiObject -Class Win32_Product |
Where-Object { $_.Vendor -like "*Microsoft*" } |
Select-Object Name, Version, InstallDate |
Sort-Object NameMethod 3 — PowerShell Get-Package (Recommended for Windows 11)
Get-Package uses the PackageManagement (OneGet) framework and is the preferred modern approach. It does not trigger a WMI consistency check, runs significantly faster, and returns results from multiple package providers including MSI, Appx, and Chocolatey if installed:
# List all installed packages (all providers)
Get-Package | Select-Object Name, Version, ProviderName | Sort-Object Name | Format-Table -AutoSize# List only MSI/Programs provider (equivalent to Add/Remove Programs)
Get-Package -ProviderName Programs | Select-Object Name, Version | Sort-Object Name# Export to CSV
Get-Package | Select-Object Name, Version, ProviderName |
Sort-Object Name |
Export-Csv -Path "$env:USERPROFILE\Desktop\packages.csv" -NoTypeInformationGet-Package with -ProviderName Programs reads from the Uninstall registry keys directly rather than querying WMI, so it is much faster and picks up applications that Win32_Product misses — including many 32-bit apps installed in WOW6432Node.Method 4 — Direct Registry Query
The Windows registry stores installed application data in two locations:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall— 64-bit applicationsHKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall— 32-bit applications on a 64-bit OS
You can query these directly from Command Prompt using reg query:
rem List all 64-bit installed apps
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" /s /v DisplayName
rem List all 32-bit apps on a 64-bit system
reg query "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall" /s /v DisplayNameFor a cleaner, combined output including version numbers, use PowerShell to query both registry paths at once:
$paths = @(
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*',
'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*',
'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*'
)
Get-ItemProperty -Path $paths |
Where-Object { $_.DisplayName -ne $null } |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Sort-Object DisplayName |
Format-Table -AutoSizeNote the addition of HKCU (current user) — per-user installs (common with applications installed without admin rights) only appear in the HKCU hive, not HKLM. WMIC and Win32_Product both miss per-user installs entirely.
Filtering and Finding Specific Applications
To check whether a specific application is installed — useful in scripts or audits:
$paths = @(
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*',
'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*',
'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*'
)
$appName = "7-Zip"
$result = Get-ItemProperty -Path $paths |
Where-Object { $_.DisplayName -like "*$appName*" } |
Select-Object DisplayName, DisplayVersion, Publisher
if ($result) {
$result | Format-Table -AutoSize
} else {
Write-Host "$appName is NOT installed on this machine." -ForegroundColor Yellow
}Exporting to CSV for Asset Inventory
The registry-based method produces the most complete results for an inventory export, covering MSI, EXE-based installers, per-user apps, and many portable tool wrappers:
$paths = @(
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*',
'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*',
'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*'
)
Get-ItemProperty -Path $paths |
Where-Object { $_.DisplayName -ne $null } |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Sort-Object DisplayName |
Export-Csv -Path "$env:USERPROFILE\Desktop\software-inventory-$(hostname).csv" -NoTypeInformation
Write-Host "Inventory saved to Desktop." -ForegroundColor GreenThe hostname is appended to the filename — useful when running this script across multiple machines via a remote management tool and consolidating results.
Comparison Summary
| Method | Speed | MSI Apps | EXE Apps | Per-User Apps | Windows 11 |
|---|---|---|---|---|---|
wmic product get | Slow | Yes | No | No | Deprecated |
Get-WmiObject Win32_Product | Slow | Yes | No | No | Works |
Get-Package | Fast | Yes | Partial | Partial | Recommended |
| Registry query (HKLM + HKCU) | Very fast | Yes | Yes | Yes | Recommended |
Need Help?
Melbits manages IT for Melbourne businesses and can deploy centralised software inventory and patch compliance reporting across your entire fleet via Microsoft Intune or a dedicated RMM platform. Contact us to learn how we can give you real-time visibility into every device in your organisation.