A slightly modified version of a scriptingGuy post to find NetApp software installed from a csv file (export from active directory)
$ErrorActionPreference= 'silentlycontinue' $exedir = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent #Variables $LikePublisher = "NetApp" ###### $infile = ($exedir + "\computerlist.csv") Write-Host "$infile" $computers= Import-Csv $infile $totalComputers = $computers.count $currentDate = (get-date -uformat "%d%m%Y") $outfile = ($exedir + "\" + "searchpublisher-" + $LikePublisher + "_" + $currentDate + ".csv") Write-Host "$outfile" $checkforoutfile = Test-Path $outfile If ($checkforoutfile){Remove-Item $outfile} $counter1 = 0 $array = @() foreach($pc in $computers){ $subkeys=$NULL $computername=$pc.computername $counter1++ Write-Progress -Activity "Processing" -Status "Processing computer $counter1 of $totalComputers" -PercentComplete (100 * ($counter1 / $computers.count)) -ID 1 Write-Progress "Initializing" "Connecting to the Windows System: $computername" -ParentID 1 #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 $counter2 = 0 foreach($key in $subkeys){ $counter2++ if ($subkeys.count -eq $NULL){Write-Host "Could not connect to $computername continuing ..."} if (($subkeys.count -ne $NULL) -and ($key -NotLike "*KB*")){ Write-Progress -Activity "Gathering Key information on $computername" -Status "Processing Key $key" -PercentComplete (100 * ($counter2 / $subkeys.count)) -ParentID 1 $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 -and $_.Publisher -like "*$LikePublisher*"} | select ComputerName, DisplayName, DisplayVersion, Publisher | ft -auto $array | Where-Object { $_.DisplayName -and $_.Publisher -like "*$LikePublisher*"} | select ComputerName, DisplayName, DisplayVersion, Publisher | export-csv $outfile