I am looking for a method or tool I can install (on the machines) to remotely check what versions of different programs are installed. I need to check this for about 60 windows machines.
Does somebody know a (opensource) solution for this.
I am looking for a method or tool I can install (on the machines) to remotely check what versions of different programs are installed. I need to check this for about 60 windows machines.
Does somebody know a (opensource) solution for this.
You can use WMI queries to get a list of installed software if it used MSI to install itself. Something like this:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colSoftware = objWMIService.ExecQuery _
("Select * from Win32_Product")
For Each objSoftware in colSoftware
Wscript.Echo "Name: " & objSoftware.Name
Wscript.Echo "Version: " & objSoftware.Version
Next
That's just a basic example. WMI can do a lot of great stuff for system management on the fly.
We use PowerShell scripts and WMI queries to collect information from Windows machines and store the info in a database. Later we might query this data to see what Java version is installed on each machine.
I had better results keeping track of installed software by looking through the registry in the path HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall. This usually gives me a Display Name, Display Version, Install Date, Publisher, and other version info. A row from the database for Java might look something like this:
MACHINE_NAME, {26A24AE4-039D-4CA4-87B4-2F83216021FF}, Java(TM) 6 Update 21, 6.0.210, 20100721, Oracle, 06.00.0210, 6, 0, 0, 1, 2010-11-01, 07:40:22.830
You can search and find sample code in VBS or PS that uses WMI, the registry, or PSInfo to get installed software from remote computers. Part of the way we use the registry method is like this:
$HKLM = [uint32]"0x80000002"
$softwareListKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
$regObject = [WmiClass]"\\$machineName\ROOT\DEFAULT:StdRegProv"
$softwareKeys = $regObject.EnumKey($HKLM, $softwareListKeyPath)
foreach ($softwareKeyName in $softwareKeys.sNames) {
#// some are GUIDs, some are software names, ones with GUID will have DisplayName
$softwareKeyPath = $softwareListKeyPath + $softwareKeyName
$keyNameAndData = $regObject.GetStringValue($HKLM, $softwareKeyPath, "DisplayName")
$displayName = $keyNameAndData.sValue
$isWindowsUpdate = $false
$rx = "(KB|M)\d{6}"
if(($softwareKeyName -match $rx) -or ($displayName -match $rx)) {
$isWindowsUpdate = $true
}
$keyNameAndData = $regObject.GetStringValue($HKLM, $softwareKeyPath, "DisplayVersion")
$displayVersion = $keyNameAndData.sValue
$keyNameAndData = $regObject.GetStringValue($HKLM, $softwareKeyPath, "InstallDate")
$installDate = $keyNameAndData.sValue
$keyNameAndData = $regObject.GetStringValue($HKLM, $softwareKeyPath, "Publisher")
$publisher = $keyNameAndData.sValue
...............
Use the built-in wmic.exe command
wmic /node:[hostname or ip address] product > product_list.txt
notepad product_list.txt