Installed Software

Getting a list of installed software

Nice article on querying machine for installed applications. Recommends against using get-wmiobject -class Win32_Product

http://blogs.technet.com/b/heyscriptingguy/archive/2011/11/13/use-powershell-to-quickly-find-installed-software.aspx

$computers = Import-Csv "D:\PowerShell\computerlist.csv" $array = @() foreach($pc in $computers){     $computername=$pc.computername     #Define the variable to hold the location of Currently Installed Programs     $UninstallKey="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"      #Create an instance of the Registry Object and open the HKLM base key     $reg=[microsoft.win32.registrykey]::OpenRemoteBaseKey('LocalMachine',$computername)      #Drill down into the Uninstall key using the OpenSubKey Method     $regkey=$reg.OpenSubKey($UninstallKey)      #Retrieve an array of string that contain all the subkey names     $subkeys=$regkey.GetSubKeyNames()      #Open each Subkey and use GetValue Method to return the required values for each     foreach($key in $subkeys){         $thisKey=$UninstallKey+"\\"+$key          $thisSubKey=$reg.OpenSubKey($thisKey)          $obj = New-Object PSObject         $obj | Add-Member -MemberType NoteProperty -Name "ComputerName" -Value $computername         $obj | Add-Member -MemberType NoteProperty -Name "DisplayName" -Value $($thisSubKey.GetValue("DisplayName"))         $obj | Add-Member -MemberType NoteProperty -Name "DisplayVersion" -Value $($thisSubKey.GetValue("DisplayVersion"))         $obj | Add-Member -MemberType NoteProperty -Name "InstallLocation" -Value $($thisSubKey.GetValue("InstallLocation"))         $obj | Add-Member -MemberType NoteProperty -Name "Publisher" -Value $($thisSubKey.GetValue("Publisher"))         $array += $obj     }  } $array | Where-Object { $_.DisplayName } | select ComputerName, DisplayName, DisplayVersion, Publisher | ft -auto