# PCS Toolkit - Software Inventory Export # Exports all installed software to CSV $timestamp = Get-Date -Format "yyyy-MM-dd_HH-mm-ss" $csvFile = "$env:USERPROFILE\Desktop\SoftwareInventory_$timestamp.csv" $logFile = "$env:USERPROFILE\Desktop\SoftwareInventory_$timestamp.log" function Log($msg) { Write-Host $msg Add-Content $logFile $msg } Log "========================================" Log " PCS Toolkit - Software Export" Log "========================================" Log "Computer: $env:COMPUTERNAME" Log "" Log "Gathering installed software..." $software = @() # 64-bit programs Log " Scanning HKLM 64-bit..." $software += Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*" -EA SilentlyContinue | Where-Object { $_.DisplayName } | Select-Object @{N='Name';E={$_.DisplayName}}, @{N='Version';E={$_.DisplayVersion}}, @{N='Publisher';E={$_.Publisher}}, @{N='InstallDate';E={$_.InstallDate}}, @{N='InstallLocation';E={$_.InstallLocation}}, @{N='Source';E={'HKLM-64'}} # 32-bit programs on 64-bit Windows Log " Scanning HKLM 32-bit..." $software += Get-ItemProperty "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" -EA SilentlyContinue | Where-Object { $_.DisplayName } | Select-Object @{N='Name';E={$_.DisplayName}}, @{N='Version';E={$_.DisplayVersion}}, @{N='Publisher';E={$_.Publisher}}, @{N='InstallDate';E={$_.InstallDate}}, @{N='InstallLocation';E={$_.InstallLocation}}, @{N='Source';E={'HKLM-32'}} # Current user programs Log " Scanning HKCU..." $software += Get-ItemProperty "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*" -EA SilentlyContinue | Where-Object { $_.DisplayName } | Select-Object @{N='Name';E={$_.DisplayName}}, @{N='Version';E={$_.DisplayVersion}}, @{N='Publisher';E={$_.Publisher}}, @{N='InstallDate';E={$_.InstallDate}}, @{N='InstallLocation';E={$_.InstallLocation}}, @{N='Source';E={'HKCU'}} # Remove duplicates and sort $software = $software | Sort-Object Name -Unique Log "" Log "Found $($software.Count) installed programs" # Export to CSV $software | Export-Csv -Path $csvFile -NoTypeInformation -Encoding UTF8 Log "Exported to: $csvFile" # Summary in log Log "" Log "=== TOP PUBLISHERS ===" $software | Group-Object Publisher | Sort-Object Count -Descending | Select-Object -First 10 | ForEach-Object { Log " $($_.Count) - $($_.Name)" } Log "" Log "========================================" Log "EXPORT COMPLETE" Log "========================================" explorer.exe "/select,$csvFile" Read-Host "Press Enter to exit"