我正在寻找一种方法或工具,我可以安装(在机器上)来远程检查安装了不同的程序的版本。 我需要检查约60个Windows机器。
有人知道(开源)的解决scheme。
如果使用MSI进行自行安装,则可以使用WMI查询获取已安装软件的列表。 像这样的东西:
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
这只是一个基本的例子。 WMI可以为飞行中的系统pipe理做很多伟大的事情。
我们使用PowerShell脚本和WMI查询从Windows机器收集信息并将信息存储在数据库中。 稍后我们可能会查询这些数据来查看每台机器上安装的Java版本。
我通过HKLM:SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstallpath查看registry,获得了更好的结果。 这通常会给我一个显示名称,显示版本,安装date,发布者和其他版本信息。 Java数据库中的一行可能如下所示:
MACHINE_NAME,{26A24AE4-039D-4CA4-87B4-2F83216021FF},Java(TM)6 Update 21,6.0.210,20100721,Oracle,06.00.0210,6,0,0,1,11〜01-01,07: 40:22.830
您可以在使用WMI,registry或PSInfo的VBS或PS中search和查找示例代码,以从远程计算机获取已安装的软件。 我们使用registry方法的一部分就是这样的:
$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 ...............
使用内置的wmic.exe命令
wmic /node:[hostname or ip address] product > product_list.txt notepad product_list.txt