gpt4 book ai didi

windows - WMI:获取已安装软件的列表

转载 作者:可可西里 更新时间:2023-11-01 12:41:22 27 4
gpt4 key购买 nike

我需要使用 wmi 调用获取远程 Windows 主机上已安装软件的列表。我试过使用 Win32_ProductWin32Reg_AddRemovePrograms 类。

使用 Win32_Product 的优点是,它会显示机器上安装的所有软件,但速度非常非常慢,并且无法在超过 90% 的主机上运行(给出类似 - NTSTATUS:NT 代码 0xc002001b - NT 代码 0xc002001b)。另一方面,Win32Reg_AddRemovePrograms 速度更快,并且在大多数主机上运行良好,但缺少很多软件。

是否有任何其他 Win32 类可以有效地完成同样的工作?

最佳答案

你可以使用 wmic。

例子:

wmic product get name,version /format:csv

wmic /node:localhost /output:d:\programlist.htm product
get name,version /format:htable.xsl

wmic product get name,version

wmic softwareelement get name,version

wmic softwarefeature get name,version

wmic wmic:root\cli>/output:c:\ProgramList.txt product get name,version

或者您可以像“添加/删除程序”一样,读取所有卸载注册表项:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall

在 64 位 Windows 上,记得还要检查:

HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\

返回计算机上安装的所有软件的列表,无论是否由 Windows 安装程序:

Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE 
strComputer = "."
strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
strEntry1a = "DisplayName"
strEntry1b = "QuietDisplayName"
strEntry2 = "InstallDate"
strEntry3 = "VersionMajor"
strEntry4 = "VersionMinor"
strEntry5 = "EstimatedSize"

Set objReg = GetObject("winmgmts://" & strComputer & _
"/root/default:StdRegProv")
objReg.EnumKey HKLM, strKey, arrSubkeys
WScript.Echo "Installed Applications" & VbCrLf
For Each strSubkey In arrSubkeys
intRet1 = objReg.GetStringValue(HKLM, strKey & strSubkey, _
strEntry1a, strValue1)
If intRet1 <> 0 Then
objReg.GetStringValue HKLM, strKey & strSubkey, _
strEntry1b, strValue1
End If
If strValue1 <> "" Then
WScript.Echo VbCrLf & "Display Name: " & strValue1
End If
objReg.GetStringValue HKLM, strKey & strSubkey, _
strEntry2, strValue2
If strValue2 <> "" Then
WScript.Echo "Install Date: " & strValue2
End If
objReg.GetDWORDValue HKLM, strKey & strSubkey, _
strEntry3, intValue3
objReg.GetDWORDValue HKLM, strKey & strSubkey, _
strEntry4, intValue4
If intValue3 <> "" Then
WScript.Echo "Version: " & intValue3 & "." & intValue4
End If
objReg.GetDWORDValue HKLM, strKey & strSubkey, _
strEntry5, intValue5
If intValue5 <> "" Then
WScript.Echo "Estimated Size: " & Round(intValue5/1024, 3) & " megabytes"
End If
Next

关于windows - WMI:获取已安装软件的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25131413/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com