IncidentResponsev2

Determine Installed Software

Task ID.AM-3.1 Determine Installed Software

Conditions

Given a responder’s computer, a network host (workstation or server), and proper access credentials.

Operator Note: Ensure network access and administrative privileges before conducting software enumeration activities. Confirm authorization and scope with network owner.

Standards

Operator Note: Multiple techniques exist for software discovery. Consider environment, scale, and level of access when selecting your approach.

End State

The list of installed software for the selected host has been collected and validated as correct by the system owner.

Operator Note: Store results securely with timestamp and hostname in filename for easy reference during later phases of the incident.

Manual Steps

PowerShell (Local - Run as Administrator)

Run BOTH commands for 32-bit and 64-bit installed software:

Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName,DisplayVersion, Publisher, InstallDate | Format-Table -AutoSize > C:\software.txt
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table -AutoSize >> C:\software.txt

PowerShell (Remote - Run as Administrator)

Invoke-command -cn <computername> -Scriptblock {Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table -AutoSize} > C:\software.txt
Invoke-command -cn <computername> -Scriptblock {Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table -AutoSize} >> C:\software.txt

Operator Note: Ensure WinRM is enabled on target hosts for remote PowerShell usage.

WMIC (Local - Run in CMD as Administrator)

wmic /output:"C:\software.txt" product get name,version /format:"C:\Windows\System32\wbem\en-us\csv"
wmic /output:"C:\%Computername%_software.txt" product get name,version /format:"C:\Windows\System32\wbem\en-us\csv"

WMIC (Remote)

wmic /node:"computername" product get name,version /format:csv > c:\software.txt

Operator Note: WMIC is deprecated in latest Windows builds. Use PowerShell if WMIC is unavailable.

PSInfo (Sysinternals - must be downloaded)

psinfo \\computername -u username -p password -s > c:\software.txt

Operator Note: Download PsTools from Sysinternals and ensure psinfo.exe is in PATH or run from extracted folder.

Output should follow output_format_template.csv and be named:

[mm/dd/yyyy_hh:mm:ss_Installed_Software_(computer name)]

Notify mission element lead and intelligence analyst of completion.

Running Script

./determine_installed_software.ps1

Operator Note: The script simplifies local and remote enumeration steps. Use when bulk processing is required.

Dependencies

https://learn.microsoft.com/en-us/sysinternals/downloads/pstools

References

PowerShell find installed software
PowerShell list installed programs
Sysinternals Psinfo


Operator Recommendations and Additional Tools

Operator Checklist

Tools by Platform

Platform Tool Purpose
Windows PowerShell Primary scriptable option, local and remote
Windows WMIC (deprecated) Alternate local/remote query
Universal PsInfo (Sysinternals) Portable utility for system info collection
Universal Custom PowerShell Script Automated multi-host enumeration

Alternate Commands and Examples

PowerShell local inventory:

Get-WmiObject -Class Win32_Product | Select-Object Name, Version

PsInfo remote command:

psinfo \\192.168.1.50 -u domain\admin -p password -s > software_192.168.1.50.txt

Best Practices


Revision History

Date Version Description Author
2025-05-02 1.8 Full original + expanded operator tool usage, procedures, and best practices Leo