Hi Everyone,
Recently, I made a script to list all the installed applications in local & remote machine & give the output in a structured manner in a excelsheet.
It looks like this:
$a = Read-Host "Enter machine name" | Out-File -filepath C:\machine.txt $computerName = Get-Content C:\machine.txt $a = New-Object -comobject Excel.Application $a.visible = $True
$b = $a.Workbooks.Add() $c = $b.Worksheets.Item(1)
$c.Cells.Item(1,1) = "Name" $c.Cells.Item(1,2) = "Publisher" $c.Cells.Item(1,3) = "InstalledDate" $c.Cells.Item(1,4) = "Version" $c.Cells.Item(1,5) = "UninstallString"
$d = $c.UsedRange $d.Interior.ColorIndex = 19 $d.Font.ColorIndex = 11 $d.Font.Bold = $True
$i = 2 function Get-InstalledAppReg ([string]$ComputerName) {
$RegPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" $BaseKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine", $ComputerName) $OpenSubKey = $BaseKey.OpenSubKey($RegPath) $i =2 $OpenSubKey.GetSubKeyNames() | ForEach { $Path = "$RegPath\$_" $BaseKey.OpenSubKey($Path).GetValue("DisplayName") $BaseKey.OpenSubKey($Path).GetValue("Publisher") $BaseKey.OpenSubKey($Path).GetValue("InstalledDate") $BaseKey.OpenSubKey($Path).GetValue("Version") $BaseKey.OpenSubKey($Path).GetValue("UninstallString") $c.Cells.Item($i,1) = $BaseKey.OpenSubKey($Path).GetValue("DisplayName") $c.Cells.Item($i,2) = $BaseKey.OpenSubKey($Path).GetValue("Publisher") $c.Cells.Item($i,3) = $BaseKey.OpenSubKey($Path).GetValue("InstalledDate") $c.Cells.Item($i,4) = $BaseKey.OpenSubKey($Path).GetValue("Version") $c.Cells.Item($i,5) = $BaseKey.OpenSubKey($Path).GetValue("UninstallString") $i ++ } } Get-InstalledAppReg($computerName)
$d.EntireColumn.AutoFit() $b.SaveAs("c:\softhive.xlsx") $b.Close() $a.Quit() Get-Process | Where { $_.Name -Eq "Excel" } | Kill
This script ran perfectly for all remote machines which has XP as a OS.
Problem started when I started running it in windows & machines remotely.
Initially it gave wrong path error, when I realised that for windows 7, I probably have to use
"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" instead of
"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall".
With this different path, when I run the same script again, I get an error:
Exception calling "OpenRemoteBaseKey" with "2" argument(s): "The network path was not found.
"
At :line:24 char:62
- $BaseKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey( <<<< "LocalMachine", $ComputerName)
Probably, I need to change other things too in the script? My machine, from where I run the script, is a windows XP SP3 machine.
Any help would be great!
Regards
Arindam